1

我需要在 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
4

3 回答 3

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;
于 2012-07-16T14:56:37.430 回答
0

与 Aaron 的非常相似,但只是主题上的一个小变化。在这里提琴

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
于 2012-07-16T15:56:49.860 回答
0

从Whytheq 中窃取了一些代码,我将其重写为使用 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
于 2012-07-16T16:03:34.970 回答