SELECT .. WHERE data=MAX(data)

5 отговора 195 прегледа
#1

SELECT .. WHERE data=MAX(data)

Здравейте,
Имам следния проблем. Искам да избера от една таблица всичко където стойноста на датата е най голяма. В таблицата имам някаква сесия която е уникална и групирам тези записи според тази сесия.
Заявката е нещо такова.
SELECT sess, num, MAX(data) FROM tbl GROUP BY sess, DAYOFWEEK(data);
Всичко работи добре но за съжаление номерчето е различно във всеки запис. искам да ми върне само номерчето където датата е най голяма. Има и други полета който също са различни но заявката става много дълга и за това съм ги спестил тук. В момента ми връща най-голямата дата за сесията и най-малкото номерче. Целта е да ми върне най-голямото. Някакви идеи

P.S. Базата е MySQL

Break The UnBreakable
Отговор
в отговор на nupaT #2

Re: SELECT .. WHERE data=MAX(data)

Това не ти ли върши работа.

SELECT sess, num, data FROM tbl order by num desc,data desc limit 0,1

Редактирано от Borko на

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

Re: Borko - така няма да стане

Не и със GROUP BY а и твоята заявка ще върне само един ред докато Пиратът пита как да върне Всички редове където ...

salle.online.bg/sig

Редактирано от salle на

Отговор
в отговор на nupaT #4

Re: Има един трик в ръководството

[линк]

А в 4.1 направо можеш да използваш

SELECT sess, num, MAX(data) AS Max FROM tbl GROUP BY sess, DAYOFWEEK(data) HAVING Max = (SELECT MAX(data) FROM tbl);

salle.online.bg/sig
Отговор
в отговор на Borko #5

Re: SELECT .. WHERE data=MAX(data)

За съжаление не.
Ситуацията ми е следната. Имам много полета и много записи в една таблица. Тъй като 80% от записите са излишни там искам малко да ги посъкратя. Идеята е информацията която ми трябва да се прехвърли в друга таблица. Всичко върви добре. Изкарва ми някакъв резултат от заявката. Но за някои полета за които не съм задал условие стойността е не тази която ми трябва. На мен ми трябва стойността на полета където датата е най-голяма (последна) За определена сесия.
INSERT INTO tbl(c_id, c_sess, c_data, c_num...) SELECT c_id, COUNT(c_sess), MAX(c_data), c_num... FROM `tbl2` WHERE cid>=1 GROUP BY c_sess, DAYOFMONTH(c_data);
Това е заявката. Полетата c_num и т.н. ми ги и връща със първата срещната стойност в базата а на мен ми трябва със стойността която е в полето съответващо на MAX(c_data). Измислил съм алтернативен варянт да сложа променлива със стойност MAX(c_data) но тези стойности са повече тъй като са повече сесийте. Ако има нещо като масив в SQL би ми свършило страхотна работа. Но до сега не съм чул за такова нещо :(

Break The UnBreakable
Отговор
в отговор на salle #6

Re: Има един трик в ръководството

Точно това ми трябваше :)

Break The UnBreakable
Отговор