Сложный SQL запрос

A
На сайте с 06.11.2010
Offline
128
458


date | timer | timerIsOn
сегодня 2 0
сегодня 2 1
сегодня 1 0
вчера 3 0
вчера 3 0
послезавтра 4 0
послезавтра 4 0

как можно одним запросом вывести поле у которого timerIsOn = 1

но надо ещё проверить, чтобы записи сгруппированные по date были sum(timer) <= 6

тоесть с текущей таблицой мне должно вывести


date | timer | timerIsOn
сегодня 2 1
W3
На сайте с 07.02.2013
Offline
5
wd3
#1

select * from taBle where timerIsOn = 1 group by date having sum(timer) <= 6

C
На сайте с 04.02.2005
Offline
291
#2

wd3, а ты уверен, что такой запрос сработает?

Что первично?

timerIsOn = 1

или

having

Т.е. на какую выборку работает having?

---------- Добавлено 10.09.2013 в 13:37 ----------

select t1.* from taBle t1, table t2

where t1.date = t2.date

group by t1.date,t2.date

having sum(t2.timer) <= 6 and t1.timer=1

ps не проверял, и также не уверен что И это правильно

A
На сайте с 19.07.2010
Offline
130
#3
Chukcha:
wd3, а ты уверен, что такой запрос сработает?
Что первично?

сработает, только при групировке нужно явно описывать поля, а не использовать звездочку.

сначала отработает where, затем group, и по результату групировки having

если есть, то потом order и limit


select date, sum(timer), timerIsOn from taBle where timerIsOn = 1 group by date having sum(timer) <= 6
или
select date, sum(timer) as timm , timerIsOn from taBle where timerIsOn = 1 group by date having timm <= 6
.............
W3
На сайте с 07.02.2013
Offline
5
wd3
#4

Chukcha, ага, уверен. А вот у тебя зачем две таблицы-то? Или это одна так получилась? И это что t1.timer=1? В условии другое поле в выборке.

---------- Добавлено 10.09.2013 в 14:50 ----------

admak, это зависит от сурбд и версии. На муське 5.6.13 работает со звездочкой.

C
На сайте с 04.02.2005
Offline
291
#5
t1.timer=1?

Ошибся...

timerIsOn

Проверь свой запрос

Конструкция HAVING используется с предложением GROUP BY для фильтрации групп в результирующем наборе.
W3
На сайте с 07.02.2013
Offline
5
wd3
#6

Chukcha, select date, sum(timer), timerIsOn from taBle where timerIsOn = 1 group by date, timer having sum(timer) <= 6

или

select date, sum(timer) as timm , timerIsOn from taBle where timerIsOn = 1 group by date, timer having timm <= 6

Так тоже можно.

A
На сайте с 06.11.2010
Offline
128
#7

спасибо всем!

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий