วิธีใดที่มีประสิทธิภาพที่สุดในการอ่านแถวสุดท้ายด้วย SQL Server
ตารางจะจัดทำดัชนีด้วยคีย์ที่ไม่ซ้ำกัน - ค่าคีย์ "ด้านล่าง" แสดงถึงแถวสุดท้าย
วิธีใดที่มีประสิทธิภาพที่สุดในการอ่านแถวสุดท้ายด้วย SQL Server
ตารางจะจัดทำดัชนีด้วยคีย์ที่ไม่ซ้ำกัน - ค่าคีย์ "ด้านล่าง" แสดงถึงแถวสุดท้าย
คำตอบ:
หากคุณใช้ MS SQL คุณสามารถลอง:
SELECT TOP 1 * FROM table_Name ORDER BY unique_column DESC
SELECT TOP 1000 * FROM table_name ORDER BY column_name DESC
และควรส่งออกข้อมูล 1,000 รายการล่าสุด
select whatever,columns,you,want from mytable
where mykey=(select max(mykey) from mytable);
mykey
เป็นดัชนีตารางของคุณ
mykey
เป็นตัวระบุที่ไม่ซ้ำกันวิธีนี้จะช่วยไม่ได้
คุณจะต้องมีคอลัมน์ที่ระบุไม่ซ้ำกันในตารางของคุณเช่นคีย์หลักที่กรอกข้อมูลอัตโนมัติหรือคอลัมน์วันที่และเวลา (ควรเป็นคีย์หลัก) จากนั้นคุณสามารถทำได้:
SELECT * FROM table_name ORDER BY unique_column DESC LIMIT 1
คำสั่งORDER BY column
บอกให้จัดเรียงผลลัพธ์ใหม่ตามข้อมูลของคอลัมน์นั้นและDESC
บอกให้กลับผลลัพธ์ (ดังนั้นให้วางผลลัพธ์สุดท้ายก่อน) หลังจากนั้นระบบLIMIT 1
จะบอกให้เดินกลับไปหนึ่งแถวเท่านั้น
หาก id บางส่วนของคุณอยู่ในลำดับฉันสมมติว่าจะมีคำสั่งบางอย่างในฐานข้อมูลของคุณ
SELECT * FROM TABLE WHERE ID = (SELECT MAX(ID) FROM TABLE)
ฉันคิดว่าแบบสอบถามด้านล่างจะใช้ได้กับ SQL Server ที่มีประสิทธิภาพสูงสุดโดยไม่มีคอลัมน์ที่เรียงลำดับได้
SELECT * FROM table
WHERE ID not in (SELECT TOP (SELECT COUNT(1)-1
FROM table)
ID
FROM table)
หวังว่าคุณจะเข้าใจมัน ... :)
ฉันลองใช้ last ใน sql query ใน SQl server 2008 แต่มันทำให้ err: "'last' ไม่ใช่ชื่อฟังก์ชันในตัวที่รู้จัก"
ดังนั้นฉันจึงใช้:
select max(WorkflowStateStatusId) from WorkflowStateStatus
เพื่อรับรหัสของแถวสุดท้าย สามารถใช้
Declare @i int
set @i=1
select WorkflowStateStatusId from Workflow.WorkflowStateStatus
where WorkflowStateStatusId not in (select top (
(select count(*) from Workflow.WorkflowStateStatus) - @i ) WorkflowStateStatusId from .WorkflowStateStatus)
คุณสามารถใช้ last_value: SELECT LAST_VALUE(column) OVER (PARTITION BY column ORDER BY column)...
ฉันทดสอบที่ฐานข้อมูลแห่งหนึ่งของฉันและทำงานได้ตามที่คาดไว้
คุณสามารถตรวจสอบเอกสารได้ที่นี่: https://msdn.microsoft.com/en-us/library/hh231517.aspx
ลองทำตามนี้
SELECT id from comission_fees ORDER BY id DESC LIMIT 1
LIMIT
ไม่ได้ใช้ ผลตอบแทนนี้Incorrect syntax near LIMIT
ในการดึงข้อมูลแถวสุดท้ายของตารางสำหรับฐานข้อมูล MS SQL 2005 คุณสามารถใช้แบบสอบถามต่อไปนี้:
select top 1 column_name from table_name order by column_name desc;
หมายเหตุ:ในการรับแถวแรกของตารางสำหรับฐานข้อมูล MS SQL 2005 คุณสามารถใช้แบบสอบถามต่อไปนี้:
select top 1 column_name from table_name;
select top 1
การไม่มีคำสั่งซื้อไม่ใช่วิธีที่เชื่อถือได้ในการรับบันทึกแรก หากคุณไม่ได้เรียงลำดับตามแสดงว่าคุณอนุญาตให้ SQL ให้บันทึกใด ๆ ที่คุณพอใจ
หากคุณไม่มีคอลัมน์ที่เรียงลำดับคุณสามารถใช้ ID ทางกายภาพของแต่ละบรรทัด:
SELECT top 1 sys.fn_PhysLocFormatter(%%physloc%%) AS [File:Page:Slot],
T.*
FROM MyTable As T
order by sys.fn_PhysLocFormatter(%%physloc%%) DESC
OFFSET
และFETCH NEXT
เป็นคุณลักษณะของ SQL Server 2012 เพื่อให้ได้เพจของ SQL ในขณะที่แสดงผลลัพธ์
OFFSET
อาร์กิวเมนต์จะใช้ในการตัดสินใจแถวแถวเริ่มต้นที่จะกลับมาจากผลและFETCH
ข้อโต้แย้งที่ใช้ในการแสดงชุดของจำนวนของแถว
SELECT *
FROM table_name
ORDER BY unique_column desc
OFFSET 0 Row
FETCH NEXT 1 ROW ONLY
SELECT * from Employees where [Employee ID] = ALL (SELECT MAX([Employee ID]) from Employees)
นี่คือวิธีที่คุณได้รับเรกคอร์ดล่าสุดและอัพเดตฟิลด์ใน Access DB
อัปเดต compalints
SET tkt = addzone &'-'& customer_code &'-'& sn where sn in (select max(sn) from compalints )
หากคุณมีตาราง Replicated คุณสามารถมี Identity = 1000 ใน localDatabase และ Identity = 2000 ใน clientDatabase ได้ดังนั้นหากคุณจับ ID สุดท้ายคุณอาจพบว่าเป็นตัวสุดท้ายจากไคลเอนต์เสมอไม่ใช่ตัวสุดท้ายจากฐานข้อมูลที่เชื่อมต่อปัจจุบัน ดังนั้นวิธีที่ดีที่สุดในการส่งคืนฐานข้อมูลที่เชื่อมต่อล่าสุดคือ:
SELECT IDENT_CURRENT('tablename')
ฉันไม่ได้รับ "ค่าสุดท้าย" ในตารางฉันได้รับมูลค่าสุดท้ายต่อเครื่องมือทางการเงิน มันไม่เหมือนกัน แต่ฉันเดาว่ามันเกี่ยวข้องกับบางคนที่กำลังมองหา "วิธีการทำตอนนี้" ฉันยังใช้ RowNumber () และ CTE และก่อนหน้านั้นเพื่อรับ 1 และเรียงลำดับตาม [คอลัมน์] desc อย่างไรก็ตามเราไม่จำเป็นต้อง ...
ฉันใช้ SQL Server 2017 เรากำลังบันทึกเห็บทั้งหมดในการแลกเปลี่ยนทั้งหมดทั่วโลกเรามี ~ 12 พันล้านเห็บต่อวันเราจัดเก็บการเสนอราคาถามและการค้าแต่ละรายการรวมทั้งปริมาณและคุณลักษณะของเห็บ (การเสนอราคาถามแลกเปลี่ยน ) ของการแลกเปลี่ยนใด ๆ ที่กำหนด
เรามีข้อมูลเห็บ 253 ประเภทสำหรับสัญญาใด ๆ (ส่วนใหญ่เป็นสถิติ) ในตารางนั้นราคาซื้อขายล่าสุดคือประเภทเห็บ = 4 ดังนั้นเมื่อเราต้องการรับ "สุดท้าย" ของราคาที่เราใช้:
select distinct T.contractId,
LAST_VALUE(t.Price)over(partition by t.ContractId order by created ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
from [dbo].[Tick] as T
where T.TickType=4
คุณสามารถดูแผนการดำเนินการในระบบ dev ของฉันมันดำเนินการค่อนข้างมีประสิทธิภาพดำเนินการใน 4 วินาทีในขณะที่ ETL นำเข้าแลกเปลี่ยนกำลังสูบข้อมูลลงในตารางจะมีการล็อกบางอย่างที่ทำให้ฉันช้าลง ... นั่นเป็นเพียงวิธีการทำงานของระบบจริง
SELECT * FROM TABLE WHERE ID = (SELECT MAX(ID) FROM TABLE)
ฉันค่อนข้างมั่นใจว่ามันคือ:
SELECT last(column_name) FROM table
เพราะฉันใช้สิ่งที่คล้ายกัน:
SELECT last(id) FROM Status