Попробуйте упорядочить результат по max(adet)
по убыванию, а затем выберите верхнюю строку из результата, используя rownum = 1
.
SELECT *
FROM (SELECT siparisler.siparis_tarihi,
max(adet),
urunler.urun_ismi
FROM siparis_detay
INNER JOIN siparisler
ON siparisler.siparisid = siparis_detay.siparisid
INNER JOIN urunler
ON urunler.urun_id = siparis_detay.urun_id
INNER JOIN musteriler
ON musteriler.musteri_id = siparisler.musteri_id
GROUP BY urunler.urun_ismi,
siparisler.siparis_tarihi
ORDER BY max(adet) DESC) x
WHERE rownum = 1;
Вы также должны использовать явный синтаксис объединения для лучшей читаемости.
Редактировать:
Выше приведен ответ на оригинальный вопрос.Ниже приводится комментарий к комментарию.
Попробуйте использовать row_number()
, чтобы назначить номера строк каждой строке, разбитой по дате, в порядке убывания максимального значения adet
, а затем выберите только те, где номер строки равен1.
SELECT y.siparis_tarihi,
y.adet,
y.urun_ismi
FROM (SELECT x.siparis_tarihi,
x.adet,
x.urun_ismi,
row_number() OVER (PARTITION BY x.siparis_tarihi
ORDER BY x.adet DESC) r
FROM (SELECT siparisler.siparis_tarihi,
max(adet) adet,
urunler.urun_ismi
FROM siparis_detay
INNER JOIN siparisler
ON siparisler.siparisid = siparis_detay.siparisid
INNER JOIN urunler
ON urunler.urun_id = siparis_detay.urun_id
INNER JOIN musteriler
ON musteriler.musteri_id = siparisler.musteri_id
GROUP BY urunler.urun_ismi,
siparisler.siparis_tarihi) x) y
WHERE y.r = 1;
Показывает только одну запись для каждой даты.Если вы хотите показать все строки с максимальным значением для даты на ничьей, замените row_number()
на rank()
.