SQL Query Group By Help - PullRequest
       1

SQL Query Group By Help

1 голос
/ 15 июля 2010

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

cust  subject  date
Cust1 Subject1 2010-12-31 21:59:59.000
Cust1 Subject1 2010-12-31 21:59:59.000
Cust4 Subject3 2011-02-27 21:59:59.000
Cust5 Subject1 2010-10-31 21:59:59.000
Cust5 Subject2 2010-10-31 21:59:59.000
Cust6 Subject2 2010-10-31 21:59:59.000
Cust6 Subject2 2010-12-31 21:59:59.000

Мне нужно добиться следующего:

  • Сгруппируйте их по признаку и теме
  • Если есть 2 записи с одинаковым регистром и темой, то мне нужно вернуть запись с самой высокой датой
  • В соответствии с вышеизложенным, если даты совпадают, верните только 1 из них.

Результат запроса должен быть:

cust  subject  date
Cust1 Subject1 2010-12-31 21:59:59.000
Cust4 Subject3 2011-02-27 21:59:59.000
Cust5 Subject1 2010-10-31 21:59:59.000
Cust5 Subject2 2010-10-31 21:59:59.000
Cust6 Subject2 2010-12-31 21:59:59.000

Может кто-нибудь помочь мне с этим?

Мне удалось выполнить 2 требования, но не все 3.

Ответы [ 3 ]

5 голосов
/ 15 июля 2010
SELECT cust, subject, max([date]) FROM myTable GROUP BY cust, subject;

У вас нет колонки с именем date, не так ли?date - зарезервированное слово, поэтому в моем запросе оно должно быть заключено в квадратные скобки.

0 голосов
/ 15 июля 2010
select cust, subject, max(date) from table group by cust, subject
0 голосов
/ 15 июля 2010

Используйте ROW_NUMBER () - если вы ранее не использовали эту и другие функции разбиения, то я определенно рекомендую изучить их, поскольку они (особенно ROW_NUMBER ()) имеют большое применение.

SELECT cust, subject, date
FROM (
  SELECT cust, subject, date, ROW_NUMBER() OVER (PARTITION BY cust, subject ORDER BY date DESC) AS RN
  FROM <your table>
) SubQuery
WHERE SubQuery.RN = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...