我需要在SQL中做一些事情,我现在很困惑!
所以我有这样的事情:
idEvent idService dateCreated
------- --------- -----------
1 1 2012-01-01
2 1 2012-02-02
3 2 2012-01-01
4 2 2012-02-02
idEvent
正在自动递增。
我需要获得的是每个dateCreated DESC
的最大行(按idService
排序)。
所以我需要得到这个结果:
idEvent
-------
2
4
答案 0 :(得分:7)
您可以使用公用表表达式将“行号”应用于每个idService / dateCreated组合。您没有指定表名,因此您必须修复它。
;WITH x AS
(
SELECT idEvent, idService, dateCreated, rn = ROW_NUMBER() OVER
(PARTITION BY idService ORDER BY dateCreated DESC)
FROM dbo.table_something_like_this
)
SELECT idEvent, idService, dateCreated
FROM x
WHERE rn = 1;
答案 1 :(得分:0)
非常类似于Aaron,但这是主题的一个小变化。在FIDDLE HERE
create table the_table
(
idEvent INT,
idService INT,
dateCreated DATETIME
)
insert into the_table
values
( 1, 1, '01 JAN 2012'),
( 2, 1, '02 FEB 2012'),
( 3, 2, '01 JAN 2012'),
( 4, 2, '02 FEB 2012')
SELECT *
FROM
the_table a
INNER JOIN
(
SELECT
idEvent
, rk = RANK() OVER (PARTITION BY idService ORDER BY dateCreated DESC)
FROM the_table
)b
ON
a.idEvent = b.idEvent
AND b.rk= 1
答案 2 :(得分:0)
窃取了为什么theq的一些代码,我重写了它以使用group by和table变量。
DECLARE @the_table TABLE
(
idEvent INT
,idService INT
,dateCreated DATETIME
)
INSERT INTO @the_table
VALUES (1,1,'01 JAN 2012'),
(2,1,'02 FEB 2012'),
(3,2,'01 JAN 2012'),
(4,2,'02 FEB 2012')
SELECT MAX(idEvent)
FROM @the_table
GROUP BY idService