我在SQL Server數據庫結構如下表:SQL查詢選擇最後一排
我想打一個查詢,會選擇早於參數日期 我是最後一個行進入,通過ID_Club分組,這意味着,該查詢的結果將是這樣的:
4, 1, 166013.01, 343697.42, 748231.00, 2011-02-28,
8, 2, 331408.11, 6981028.26, 738000.00, 2011-02-28,
etc...
我可以做類似的查詢不是最後一排,但與總和。它看起來像:
我在SQL Server數據庫結構如下表:SQL查詢選擇最後一排
我想打一個查詢,會選擇早於參數日期 我是最後一個行進入,通過ID_Club分組,這意味着,該查詢的結果將是這樣的:
4, 1, 166013.01, 343697.42, 748231.00, 2011-02-28,
8, 2, 331408.11, 6981028.26, 738000.00, 2011-02-28,
etc...
我可以做類似的查詢不是最後一排,但與總和。它看起來像:
看一看該SQL OVER clause when used with PARTITION小號
SELECT ID_Club, DateStart, DateEnd, Cash, Less, InWay
FROM Period p
INNER JOIN
(SELECT ID_Period, ROW_NUMBER() OVER (PARTITION by ID_CLUB ORDER BY ID_Period DESC) as RowNum
FROM Period
WHERE DateEnd<'2011-03-01') AS x
ON p.ID_Period = x.ID_Period
WHERE x.RowNum = 1 -- Find just the last row in each partition
你的 「SUM」 查詢將輝l如果在給定的日期範圍內俱樂部還有任何其他非零期記錄
出於興趣,下一版本的SQL(Denali)允許您在一個記錄中詢問「FIRST」或「LAST」記錄分區,從而節省您的嵌套的努力加入
更新:測試DDL/DML
create table Period
(
ID_Period INT,
ID_Club INT,
DateStart DATETIME,
DateEnd DATETIME,
Cash MONEY,
Less MONEY,
InWay MONEY
)
insert into Period (ID_Period, ID_Club, DateStart, DateEnd, Cash, Less, InWay)
VALUES (1, 1, 2010-08-01, 2010-08-31, 0, 0, 0)
insert into Period (ID_Period, ID_Club, DateStart, DateEnd, Cash, Less, InWay)
VALUES (2, 1, 2010-08-01, 2010-08-31, 166013.01, 343697.42, 748231.00)
insert into Period (ID_Period, ID_Club, DateStart, DateEnd, Cash, Less, InWay)
VALUES (3, 2, 2010-08-01, 2010-08-31, 0, 0, 0)
insert into Period (ID_Period, ID_Club, DateStart, DateEnd, Cash, Less, InWay)
VALUES (4, 2, 2010-08-01, 2010-08-31, 331408.11, 6981028.26, 738000.00)
不太確定如何閱讀您的問題。你只需要在指定日期之前的最新記錄?或者是日期前的所有記錄?
如果它的所有記錄,然後只需刪除聚合函數,並刪除該組by語句,以結束了:
SELECT * FROM dbo.Period WHERE DateEnd < '2011-03-01';
如果你想只有最近戰績:
SELECT TOP 1 * FROM dbo.Period WHERE DateEnd < '2011-03-01' ORDER BY DateEnd DESC;
我想要ID_Club的每個值的最近記錄。 – Metaller
你可以發佈你的表的DDL? – markus