我在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