Cách hiệu quả nhất để đọc hàng cuối cùng với SQL Server là gì?
Bảng được lập chỉ mục trên một khóa duy nhất - các giá trị khóa "dưới cùng" đại diện cho hàng cuối cùng.
Câu trả lời:
Nếu bạn đang sử dụng MS SQL, bạn có thể thử:
SELECT TOP 1 * FROM table_Name ORDER BY unique_column DESC
SELECT TOP 1000 * FROM table_name ORDER BY column_name DESC
và sẽ xuất ra 1000 bản ghi cuối cùng.
select whatever,columns,you,want from mytable
where mykey=(select max(mykey) from mytable);
mykey
là chỉ mục bảng của bạn
mykey
là số nhận dạng duy nhất, cách tiếp cận này sẽ không hữu ích
Bạn sẽ cần một số loại cột nhận dạng duy nhất trong bảng của mình, chẳng hạn như khóa chính tự động điền hoặc cột ngày giờ (tốt nhất là khóa chính). Sau đó, bạn có thể làm điều này:
SELECT * FROM table_name ORDER BY unique_column DESC LIMIT 1
Lệnh ORDER BY column
cho nó thay đổi kết quả theo dữ liệu của cột đó và lệnh DESC
cho nó đảo ngược kết quả (do đó đặt cái cuối cùng trước). Sau đó, LIMIT 1
câu lệnh chỉ trả lại một hàng.
Nếu một số id của bạn theo thứ tự, tôi cho rằng sẽ có một số thứ tự trong db của bạn
SELECT * FROM TABLE WHERE ID = (SELECT MAX(ID) FROM TABLE)
Tôi nghĩ rằng truy vấn dưới đây sẽ hoạt động cho SQL Server với hiệu suất tối đa mà không có bất kỳ cột nào có thể sắp xếp
SELECT * FROM table
WHERE ID not in (SELECT TOP (SELECT COUNT(1)-1
FROM table)
ID
FROM table)
Hy vọng bạn đã hiểu nó ... :)
Tôi đã thử sử dụng last trong truy vấn sql trong SQl server 2008 nhưng nó cho lỗi này: "'last' không phải là tên hàm tích hợp sẵn được công nhận."
Vì vậy, tôi đã kết thúc bằng cách sử dụng:
select max(WorkflowStateStatusId) from WorkflowStateStatus
để lấy Id của hàng cuối cùng. Người ta cũng có thể sử dụng
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)
Bạn có thể sử dụng last_value: SELECT LAST_VALUE(column) OVER (PARTITION BY column ORDER BY column)...
Tôi kiểm tra nó tại một trong những cơ sở dữ liệu của tôi và nó hoạt động như mong đợi.
Bạn cũng có thể kiểm tra tài liệu de tại đây: https://msdn.microsoft.com/en-us/library/hh231517.aspx
Thử đi
SELECT id from comission_fees ORDER BY id DESC LIMIT 1
LIMIT
. Điều này trở lạiIncorrect syntax near LIMIT
Để truy xuất hàng cuối cùng của bảng cho cơ sở dữ liệu MS SQL 2005, Bạn có thể sử dụng truy vấn sau:
select top 1 column_name from table_name order by column_name desc;
Lưu ý: Để lấy hàng đầu tiên của bảng cho cơ sở dữ liệu MS SQL 2005, Bạn có thể sử dụng truy vấn sau:
select top 1 column_name from table_name;
select top 1
không có đơn đặt hàng không phải là cách đáng tin cậy để có được bản ghi đầu tiên. Nếu bạn không đặt hàng trước, bạn cho phép SQL cung cấp cho bạn bất kỳ bản ghi nào bạn muốn.
OFFSET
và FETCH NEXT
là một tính năng của SQL Server 2012 để đạt được phân trang SQL trong khi hiển thị kết quả.
Đối OFFSET
số được sử dụng để quyết định hàng bắt đầu trả về các hàng từ một kết quả và FETCH
đối số được sử dụng để trả về một tập hợp số hàng.
SELECT *
FROM table_name
ORDER BY unique_column desc
OFFSET 0 Row
FETCH NEXT 1 ROW ONLY
Đây là cách bạn lấy bản ghi cuối cùng và cập nhật một trường trong Access DB.
CẬP NHẬT compalints
SET tkt = addzone &'-'& customer_code &'-'& sn where sn in (select max(sn) from compalints )
Nếu bạn không có bất kỳ cột nào có thứ tự, bạn có thể sử dụng id vật lý của mỗi dòng:
SELECT top 1 sys.fn_PhysLocFormatter(%%physloc%%) AS [File:Page:Slot],
T.*
FROM MyTable As T
order by sys.fn_PhysLocFormatter(%%physloc%%) DESC
Nếu bạn có bảng Replicated, bạn có thể có Identity = 1000 trong localDatabase và Identity = 2000 trong clientDatabase, vì vậy nếu bạn bắt được ID cuối cùng, bạn có thể tìm thấy ID cuối cùng từ máy khách, không phải cuối cùng từ cơ sở dữ liệu được kết nối hiện tại. Vì vậy, phương pháp tốt nhất trả về cơ sở dữ liệu được kết nối cuối cùng là:
SELECT IDENT_CURRENT('tablename')
Tôi không nhận được "giá trị cuối cùng" trong bảng, tôi đang nhận Giá trị cuối cùng trên mỗi công cụ tài chính. Nó không giống nhau nhưng tôi đoán nó phù hợp với một số người đang muốn tìm kiếm "cách nó được thực hiện bây giờ". Tôi cũng đã sử dụng RowNumber () và CTE's và trước đó để chỉ cần lấy 1 và sắp xếp theo [cột] desc. tuy nhiên chúng ta cần ...
Tôi đang sử dụng SQL server 2017, chúng tôi đang ghi lại tất cả các dấu tích trên tất cả các sàn giao dịch trên toàn cầu, chúng tôi có ~ 12 tỷ tích tắc mỗi ngày, chúng tôi lưu trữ từng Giá thầu, yêu cầu và giao dịch bao gồm khối lượng và các thuộc tính của một dấu ) của bất kỳ sàn giao dịch nhất định.
Chúng tôi có 253 loại dữ liệu đánh dấu cho bất kỳ hợp đồng nhất định nào (chủ yếu là số liệu thống kê) trong bảng đó, giá giao dịch cuối cùng là loại đánh dấu = 4, vì vậy, khi chúng ta cần lấy "cuối cùng" của Giá, chúng ta sử dụng:
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
Bạn có thể thấy kế hoạch thực thi trên hệ thống nhà phát triển của tôi, nó thực thi khá hiệu quả, thực hiện trong 4 giây trong khi ETL nhập trao đổi đang bơm dữ liệu vào bảng, sẽ có một số khóa làm chậm tôi ... đó chỉ là cách hệ thống trực tiếp hoạt động.
SELECT * FROM TABLE WHERE ID = (SELECT MAX(ID) FROM TABLE)