您需要通過劃分他們TransactionCode
列行號分配表中的每一行,然後由ActionDate
對它們進行排序降序排列,以便您在該部分的頂部獲得最新的交易。一旦根據此邏輯分配了行號,就可以從派生表輸出中僅過濾出rownum
值爲的行。這將獲取所有交易代碼。您可以根據您的要求在下面的查詢中添加過濾條件。
Click here to view the demo in SQL Fiddle
腳本:
CREATE TABLE dbo.TransTable
(
IdKey INT NOT NULL IDENTITY
, TransactionCode VARCHAR(10) NOT NULL
, ActionDate DATETIME NOT NULL
);
INSERT INTO dbo.TransTable (TransactionCode, ActionDate) VALUES
('code 1', '2012-04-27 01:04:12.467'),
('code 1', '2012-04-22 09:16:29.354'),
('code 2', '2012-04-12 11:04:27.751'),
('code 1', '2012-06-19 12:27:12.232'),
('code 2', '2012-04-04 05:22:17.467'),
('code 3', '2012-05-01 08:49:12.951'),
('code 3', '2012-05-13 06:12:12.234');
SELECT IdKey
, TransactionCode
, ActionDate
FROM
(
SELECT IdKey
, TransactionCode
, ActionDate
, ROW_NUMBER() OVER (
PARTITION BY TransactionCode
ORDER BY ActionDate DESC
) rownum
FROM dbo.TransTable
WHERE ActionDate < GETDATE()
) t1 WHERE rownum = 1;
輸出:
IdKey TransactionCode ActionDate
----- --------------- -----------------------
1 code 1 2012-04-27 01:04:12.467
3 code 2 2012-04-12 11:04:27.750
嘗試使用** **獨特代替 – Addicted
獨特的是應用到表,不是嗎?我無法改變桌子。 – windowskm