малък SQL

6 отговора 431 прегледа
#1

малък SQL

imam tablica А:

KOD IME DATA DRUGI POLETA
1 KIRO 1.1.2004 1 2 2 1
2 KIRO 3.1.2004 2 6 3 3
3 KRASI 1.1.2004 3 3 5 1
4 KRASI 3.1.2004 1 1 2 5
5 KRASI 4.1.2004 2 3 5 1

Трябват ми редовете, които имат най-високи стойности за датата за всяко име, т.е.:
2 KIRO 3.1.2004 2 6 3 3
5 KRASI 4.1.2004 2 3 5 1

Проблемът е, че "другите" полета имат различни стойности и с групировка нищо не става :(

плеасе хелп :))

Отговор
в отговор на Kikimor #2

Re: малък SQL

SELECT kod,Ime,MAX(Date),Drugo,Drugo1,Drugo2 FROM test GROUP BY Ime;

Отговор
в отговор на _danitu #3

Re: малък SQL

нали се сещаш. че така дава грешка :
"When GROUP BY exists, every simple field in projectors must be in GROUP BY."
Справката става като ползвам временна таблица, но все се надявах да стане и по друг начин, примерно с клауза HAVING, която да си призная, никога не съм ползвал досега... Знам, че не съм най-умния и затова питам :)

Отговор
в отговор на Kиkимop #4

Re: малък SQL

_danitu ти е дал решение за mysql, ти трябваше да споменеш може би все пак какъв продукт ползваш

може да се направи без временна таблица нещо като така

SELECT t.* FROM tbl AS t, (SELECT name, max(date) AS date FROM tbl GROUP BY name) AS h WHERE t.name = h.name AND t.date = h.date;

може и с ID вместо с name по-бързо би трябвало да е

(това горе-долу е като с временна таблица, ама с една заявка)

не се сещам дали има друго решение в момента

синтаксиса може да ти е по-различен за различните ДБ-та

Отговор
в отговор на Kikimor #5

Re: малък SQL

мдам, за mysql си мислех ама вярно че никъде не си написал каква БД все пак е .....

Отговор
в отговор на Kikimor #6

Re: малък SQL

select * from table t where DATA=(select max(DATA) from table where NAME=t.NAME)

Отговор
в отговор на mr.vain #7

Re: малък SQL

Мерси много, това проработи чудно.. Харесвам малки спретнати кодове :) Мерси пак :)

Отговор