SQL Различных строк на основе даты, созданной строки - PullRequest
1 голос
/ 23 декабря 2011

У меня есть следующие данные.

enter image description here

Мне нужно запросить данные, чтобы получить только следующие записи.

Мне нужны уникальные записи на основе DateApplication. Как ниже.

Может кто-нибудь сказать мне, как это сделать, пожалуйста, в SQL Server 2008?

enter image description here

Ответы [ 5 ]

3 голосов
/ 23 декабря 2011

Вы можете использовать функцию row_number() здесь:

select
    name,
    email,
    dateapplication,
    description
from
(
    select *, row_number() over (partition by email order by dateapplication desc) as row_num
    from YourTable
)a
where row_num = 1
2 голосов
/ 23 декабря 2011

Вы можете попробовать это

SELECT Name, Email, DateApplication, Description
FROM ( SELECT ROW_NUMBER() OVER (PARTITION BY Name ORDER BY DateApplication DESC) RowNumber,
              Name, Email, DateApplication, Description
       FROM YourTableName)
WHERE RowNumber = 1

Надеюсь, это поможет

2 голосов
/ 23 декабря 2011

Существует несколько способов сделать скин для кошки, но обычно у вас есть подзапрос, возвращающий вам каждое Имя с его самой последней датой, и СОЕДИНЯЙТЕ его обратно с исходной таблицей.

Использование оператора WITH

;WITH q AS (
  SELECT  Name, DateApplication = MAX(DateApplication)
  FROM    YourData
  GROUP BY
          Name
)
SELECT  Name
        , Email
        , DateApplication
        , Description
FROM    YourTable yt
        INNER JOIN q ON q.Name = yt.Name
                        AND q.DateApplication = yt.DateApplication

Использование внутреннего соединения

SELECT  Name
        , Email
        , DateApplication
        , Description
FROM    YourTable yt
        INNER JOIN (
          SELECT  Name, DateApplication = MAX(DateApplication)
          FROM    YourData
          GROUP BY
                  Name
        ) q ON q.Name = yt.Name
               AND q.DateApplication = yt.DateApplication

Обратите внимание, что в каждом из этих примеров я предполагаю, что комбинация Name, DateApplication уникальна.

2 голосов
/ 23 декабря 2011
SELECT Name, email, MAX(DateApplication) As DateApplication, 
  (SELECT TOP 1 description
  FROM tbl As tbl1 
  where tbl1.Email = tbl.Email AND tbl1.DateApplication = MAX(tbl.DateApplication))
  ) As description
from tbl
GROUP BY Name, email
1 голос
/ 23 декабря 2011

Предполагая, что вы хотите последнюю запись , вы можете сделать это так:

SELECT t1.Name, t1.Email, t1.DateApplication, t1.Description
FROM tablename t1
WHERE t1.DateApplication = 
      (SELECT MAX(t2.DateApplication)
       FROM tablename t2
       WHERE t2.Name = t1.Name AND t2.Email = t1.Email)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...