Выбрать всю таблицу, но уникальное значение в определенном столбце - PullRequest
3 голосов
/ 09 января 2012

Пожалуйста, помогите мне с проблемой, с которой я столкнулся во время работы. Я работаю с SQL Server, и я знаю, что с помощью курсоров я мог бы добиться этого, но я почти уверен, что есть способ сделать это с помощью простого запроса в SQL, но мой мозг не хочет включи. Позвольте мне объяснить мою проблему на примере.

У меня есть такая таблица:

postedby    |   date        |   comment |
1           |   01.01.2012  |   sth sth |
2           |   01.01.2012  |   sth sth |
3           |   01.01.2012  |   sth sth |
2           |   01.01.2012  |   sth sth |
3           |   02.01.2012  |   sth sth |
2           |   03.01.2012  |   sth sth |
2           |   05.01.2012  |   sth sth |

Что я хочу сделать, так это получить все сообщения, кроме одной для каждого пользователя (в колонке), дата должна быть самой последней и, конечно, показывать комментарий.

Я пытался сделать:

Select distinct postedby, date, comment

но не сработало, так как я понимаю разные работы для каждого столбца, поэтому, если в 2-х строках размещено одно и то же, но комментарий отличается, он будет обрабатывать его как различающийся

Я пытался сделать:

Select postedby,date,comment group by postedby (не беспокойтесь о предложении from) давая мне ошибку или агрегацию, поэтому я попытался select postedby,min(date) group by postedby - конечно, работает, но я не могу получить комментарий.

Должен ли я каким-то образом использовать агрегированные запросы? Или чего мне не хватает?

Ответы [ 2 ]

7 голосов
/ 09 января 2012

Похоже, сегодня день функции RowNumber !! Если вам нужна последняя дата и комментарий для каждого сообщения:

SELECT postedBy, date, comment
FROM (SELECT ROW_NUMBER() OVER (PARTITION BY postedby, ORDER BY date DESC) AS RowNumber, 
             postedBy, date, comment
      FROM MyTable) t 
WHERE RowNumber = 1
0 голосов
/ 10 января 2012

Вы пытались min(date). Он вернет минимальную дату уникального значения. Вы пробовали max(date)? Это будет лучше для этого. Максимальная дата всегда возвращает самую последнюю дату.

...