въпрос за select
8 отговора
731 прегледа
въпрос за select
имам следният въпрос
значи за дандено ip във една таблица има да речем 22 записа как мога да селектна последният запис за това ип
значи за дандено ip във една таблица има да речем 22 записа как мога да селектна последният запис за това ип
Re: проста работа
Само дефинирай какво имаш предвид "последния запис"
salle.online.bg/sig
salle.online.bg/sig
Re: проста работа
Еми случаят е следният имам една таблица с две полета:
в едното се записва дата и време под формата на unix timestamp а във другото ip номера и да речем че за период от два часа да речем от 00:00:00 до 02:00:00
дадено ип се среща няколко пъти да речем 6 пъти аз искам да изкарам последният шести път и да взема времето
в едното се записва дата и време под формата на unix timestamp а във другото ip номера и да речем че за период от два часа да речем от 00:00:00 до 02:00:00
дадено ип се среща няколко пъти да речем 6 пъти аз искам да изкарам последният шести път и да взема времето
Re: Е така вече е по-лесно нали?
"в едното се записва дата и време под формата на unix timestamp ... за период от два часа да речем от 00:00:00 до 02:00:00 дадено ип се среща няколко пъти да речем 6 пъти аз искам да изкарам последният"
т.е. искаш да изкараш реда за който ip е еди какво си и timestamp е най-голямо?
Виждаш ли как същото нещо казано по друг начин може да се преведе на SQL
Сега ако каже и за каква СУБД иде реч ще се намери някой да ти предложи оптимално решение.
За MySQL:
SELECT ... WHERE ip = '192.168.1.1' ORDER BY ts DESC LIMIT 1;
salle.online.bg/sig
т.е. искаш да изкараш реда за който ip е еди какво си и timestamp е най-голямо?
Виждаш ли как същото нещо казано по друг начин може да се преведе на SQL
Сега ако каже и за каква СУБД иде реч ще се намери някой да ти предложи оптимално решение.
За MySQL:
SELECT ... WHERE ip = '192.168.1.1' ORDER BY ts DESC LIMIT 1;
salle.online.bg/sig
Re: Е така вече е по-лесно нали?
А защо не с агрегат?
SELECT ... MAX(ts) AS maxTS ... WHERE ... GROUP BY ip;
Само питам.
Има три вида хора. Част от проблема, част от решението и част от пейзажа.
SELECT ... MAX(ts) AS maxTS ... WHERE ... GROUP BY ip;
Само питам.
Има три вида хора. Част от проблема, част от решението и част от пейзажа.
Re: Е така вече е по-лесно нали?
За такава заявка няма смисъл от агрегат. GROUP BY най вероятно ще направи темп таблица в паметта, което за един ред е излишно. Освен това limit е оптимизиран доста добре пък ако има и индекс на датата и IP-то MySQL ще прочете от диска само реда който му трябва, останалото ще го вземе от индекса който при нормални настройки е вече зареден в паметта. Скороста на изпълнение ще е с пъти по бърза.
Разбира се ако трябва да се извади за всички IP-та, ще трябва да се мине през GROUP BY, макар че за по голяма таблица с 10-100 милиона записа ше е адски бавно и пак бих се замислил дали да не използвам нещо друго.
Разбира се ако трябва да се извади за всички IP-та, ще трябва да се мине през GROUP BY, макар че за по голяма таблица с 10-100 милиона записа ше е адски бавно и пак бих се замислил дали да не използвам нещо друго.
Re: Е така вече е по-лесно нали?
Защо си мислиш, че има само един запис за това IP?
Защо си мислиш, че двете заявки ще обработят различен брой записи физически, при положение, че имат еднакви FROM и WHERE клаузи?
Защо си мислиш, че ORDER BY няма да ползва временна таблица, а GROUP BY ще ползва за толкова малко записи?
Защо предпочиташ да използваш proprietary MySQL измислица по не set-oriented начин, пред ANSI SQL съвместимия синтаксис?
Разсъжденията ти са bulsh*t отвсякъде, IMNSHO! Въпроса е дали го осъзнаваш?!
cheers,
</wqw>
Защо си мислиш, че двете заявки ще обработят различен брой записи физически, при положение, че имат еднакви FROM и WHERE клаузи?
Защо си мислиш, че ORDER BY няма да ползва временна таблица, а GROUP BY ще ползва за толкова малко записи?
Защо предпочиташ да използваш proprietary MySQL измислица по не set-oriented начин, пред ANSI SQL съвместимия синтаксис?
Разсъжденията ти са bulsh*t отвсякъде, IMNSHO! Въпроса е дали го осъзнаваш?!
cheers,
</wqw>
Re: проста работа
A taka ? :
select ... from tbl where ip = '192.168.1.1'
and adate= (select max(adate) from tbl where ip = '192.168.1.1')
Поздрави !!!


select ... from tbl where ip = '192.168.1.1'
and adate= (select max(adate) from tbl where ip = '192.168.1.1')
Поздрави !!!