SELECT .. WHERE data=MAX(data)
5 отговора
195 прегледа
SELECT .. WHERE data=MAX(data)
Здравейте,
Имам следния проблем. Искам да избера от една таблица всичко където стойноста на датата е най голяма. В таблицата имам някаква сесия която е уникална и групирам тези записи според тази сесия.
Заявката е нещо такова.
SELECT sess, num, MAX(data) FROM tbl GROUP BY sess, DAYOFWEEK(data);
Всичко работи добре но за съжаление номерчето е различно във всеки запис. искам да ми върне само номерчето където датата е най голяма. Има и други полета който също са различни но заявката става много дълга и за това съм ги спестил тук. В момента ми връща най-голямата дата за сесията и най-малкото номерче. Целта е да ми върне най-голямото. Някакви идеи
P.S. Базата е MySQL
Break The UnBreakable
Имам следния проблем. Искам да избера от една таблица всичко където стойноста на датата е най голяма. В таблицата имам някаква сесия която е уникална и групирам тези записи според тази сесия.
Заявката е нещо такова.
SELECT sess, num, MAX(data) FROM tbl GROUP BY sess, DAYOFWEEK(data);
Всичко работи добре но за съжаление номерчето е различно във всеки запис. искам да ми върне само номерчето където датата е най голяма. Има и други полета който също са различни но заявката става много дълга и за това съм ги спестил тук. В момента ми връща най-голямата дата за сесията и най-малкото номерче. Целта е да ми върне най-голямото. Някакви идеи
P.S. Базата е MySQL
Break The UnBreakable
Re: SELECT .. WHERE data=MAX(data)
Това не ти ли върши работа.
SELECT sess, num, data FROM tbl order by num desc,data desc limit 0,1
SELECT sess, num, data FROM tbl order by num desc,data desc limit 0,1
Редактирано от Borko на
Re: Borko - така няма да стане
Не и със GROUP BY а и твоята заявка ще върне само един ред докато Пиратът пита как да върне Всички редове където ...
salle.online.bg/sig
salle.online.bg/sig
Редактирано от salle на
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
А в 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
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
Ситуацията ми е следната. Имам много полета и много записи в една таблица. Тъй като 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