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

アーロンのものと非常によく似ていますが、テーマの小さなバリエーションです. フィドルについてはこちら

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 とテーブル変数を使用するように書き直しました。

   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 に答える