[sql] выбрать в каждой группе минимальный
бд то какая?
тебе сюда:
SELECT a, c
FROM (SELECT ROW_NUMBER OVER (PARTITION BY a ORDER BY b) AS r, a, c
FROM tabl) tt
WHERE r = 1
в HAVING вроде нельзя окна использовать
sqlite> select q.a, q.c from x q left join x w on (q.a = w.a and q.b > w.b) where w.a is null;
a c
1 b
2 g
3 k
4 p
min(b)
select a, (select c from #Temp e where a = t.a and b = t.b)
from (
select c.a a, min(c.b) b
from #temp c
group by c.a) t
max(b)
select a, (select c from #Temp e where a = t.a and b = t.b)
from (
select c.a a, max(c.b) b
from #temp c
group by c.a) t
Правда я надеюсь у тебя пара столбцов а и б уникальна, иначе все будет некорректно работать.
только если PK по a, b составлен
че нельзя? не понял
ну сейчас у тебя они допустим уникальны, через месяц если накидают значений других, и свалится твой запрос.
Сильно дорогой запрос имхо.
В таком случает можно чуть чуть изменить запрос, добавить min или max
select a, (select min(c) from #Temp e where a = t.a and b = t.b)
from (
select c.a a, min(c.b) b
from #temp c
group by c.a) t
либо так, где выведутся все минимальные значения.
select t.a, p.c
from (
select c.a a, min(c.b) b
from #temp c
group by c.a) t join #temp p on t.a= p.a and t.b = p.b
Оставить комментарий
yolki
есть таблица (a,b,c)нужно сгруппировать по a, упорядочить по b и взять первый c.
типа такого:
результат:
другими словами:
сгруппировать по a, в каждой группе выбрать минимальный b и выдать соответствующий ему c.
то же с максимальным b