Forum Webscript.Ru
Общие => Базы данных => Тема начата: Stas от 05 Сентября 2003, 22:03:47
-
Знатокам SQL..
Хотелось бы чтобы подобный запрос был возможным, однако MySQL такого не разрешает. Знает-ли кто-нибудь как ето можно сделать ?
SELECT IFNULL(MAX(sn),0) AS maxvalue, IFNULL(MIN(sn),0) AS minvalue, IFNULL(((MAX(sn) - MIN(sn))+1),0) AS difference, COUNT(sn) AS qty FROM callingcards WHERE value=\'3.00\' AND (sn BETWEEN minvalue AND maxvalue);
Знаю что можно с вложенными запросами. А есть ешё способ ?
-
SELECT ... WHERE value=\'3.00\' HAVING sn BETWEEN minvalue AND maxvalue.
-
ERROR 1054: Unknown column \'sn\' in \'having clause\'
??
-
fidget
sn в HAVING блоке не признается...
-
хм .... да, без GROUP BY не хочет .. :(
Кстати, а зачем выбирать значения между минимальным и максимальным значением? они ведь и так так находятся .. или я что-то пропустила?
-
вобшем ето для базы данных телефонных карт. В таком запросе сразу видно есть-ли ошибка.. Т.к. difference ВСЕГДА должна быть равна qty..
-
нет, я не то имела ввиду.
вот у тебя есть столбец sn и ты ставишь ословие выбрать данные, которые находятся между минимальным и максимальным значением этот самого sn. Вопрос - зачем такое условие? ведь данные и так находятся между минимальным и максимальным значением?
-
fidget
но MIN и MAX значения без условия WHERE (used=1) например ...
Тоесть MIN и MAX значения серииных номеров всех карточек. Тоесть чтобы проверить что диапозон серийных номеров непрерывный.
Тоесть минимальное и махимальное значение всегда будет такое же.. Но если в WHERE иа напишу used=1. То если не все карточки новые, тогда выборка выдасть меньше чем (MAX-MIN)+1