SQL получить последнюю запись даты - PullRequest
2 голосов
/ 01 марта 2012

У меня есть запрос, который имеет следующий

DATE                    ID              Name
---                     ------------    -----------
2012-02-07 11:24:53.000 00001-KK-12 Smith, JEN  
2011-12-28 00:00:00.000 00001-KK-12 Bearson, Matt   
2012-02-13 10:38:18.000 00003-KJ-12 Wick, Julian    

Что мне нужно сделать, это получить последнюю дату для данного идентификатора и затем показать результаты

Так что в этом случае, это будет:

DATE                    ID              Name
---                     ------------    -----------
2012-02-07 11:24:53.000 00001-KK-12 Smith, JEN  
2012-02-13 10:38:18.000 00003-KJ-12 Wick, Julian    

Я пытался использовать Top (1) с группой по идентификатору, но безуспешно

Ответы [ 2 ]

9 голосов
/ 01 марта 2012

Есть несколько способов сделать это. Одним из способов является использование row_number. Это полезно, если есть вероятность того, что есть свидание на дату, и вы хотите выбрать его произвольно.

WITH CTE AS (
SELECT 
   row_number() over (partition by id order by date desc) rn,
   date,
   id,
   name

FROM
   table)
SELECT date,
       id,
       name
FROM CTE WHERE RN = 1

Другой вариант - использовать ANTI JOIN (без агрегатов и без CTE) следующим образом, но он будет возвращать несколько результатов, если есть привязка для первого для данного идентификатора.

   SELECT 
      t.date,
      t.id,
      t.name
   FROM
      table t
      LEFT JOIN table t1
      WHERE t.Id = t1.id
            and t.Date < t1.Date
   WHERE
       t1.Date is null
1 голос
/ 01 марта 2012

Вы хотите использовать ROW_NUMBER () OVER . Я собирался создать образец, но похоже, что Конрад уже сделал:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...