Помогите с запросом

Daeloce
Дата: 04.02.2013 11:08:28
Доброго времени суток всем.

Который день бьюсь не могу составить нормально запрос. Есть таблица:

a | b | c | d | e |
_______________
1 | 0 | q | p | r |
1 | 1 | q | l | i |
2 | 0 | k | p | r |
3 | 0 | q | p | r |
3 | 1 | q | s | d |
4 | 0 | q | a | s |

a и b - primary key.

Нужно составить запрос который вернет все строчки такие что c == 'q', и при этом из всех строчек с одинаковым a останется только та у которой b максимальная. Т.е. для выше приведенной таблицы для c == 'q' должна получиться следующая выдача:

a | b | c | d | e |
_______________
1 | 1 | q | l | i |
3 | 1 | q | s | d |
4 | 0 | q | a | s |

Пробовал такой запрос:

SELECT a.a, max(a.b) AS b, a.c FROM<table_name> a WHERE a.c = 'q' GROUP BY a.a, a.c

он работает, но пока в выборку не добавить остальные столбцы. Т.е. такой запрос:

SELECT a.a, max(a.b) AS b, a.c, a.d, a.e FROM<table_name> a WHERE a.c = 'q' GROUP BY a.a, a.c, a.d, a.e

уже не работает, и выдает просто все строчки где a.c = 'q', без ограничений на максимальный b
iap
Дата: 04.02.2013 11:18:42
SELECT TOP(1) WITH TIES *
FROM table_name
WHERE c='q'
ORDER BY ROW_NUMBER()OVER(PARTITION BY a ORDER BY b DESC);
Добрый Э - Эх
Дата: 04.02.2013 12:17:26