Можно ли обойтись только запросом SQL ?

D
На сайте с 28.06.2008
Offline
996
252

Есть данные в таблице по годам. Мне нужно вывести данные за последний год в котором есть более 10 значений.

Запрос вида

SELECT t2.year,COUNT(t2.year)
FROM `firm_items` as t1
INNER JOIN
firm_tovar AS t2 ON t2.item_id = t1.id
WHERE t1.rayon = 'Челябинск'
GROUP BY t2.year

выводит кол-во значений по годам.

Далее с помощью говнокода в пхп нахожу последний год и снова делаю запрос уже зная в каком последнем году более 10 значений

SELECT *
FROM `firm_items` as t1
INNER JOIN
firm_tovar AS t2 ON t2.item_id = t1.id
WHERE t1.rayon = 'Челябинск'
and t2.year = "2016"
ORDER BY `t2`.`value` DESC

Можно ли модифицировать второй запрос чтобы как-то сразу понимать в каком из последих годов более 10 значений и его уже использовать в выборке?

png 186224.png
IL
На сайте с 20.04.2007
Offline
418
#1


having COUNT(t2.year) > 10


---------- Добавлено 04.09.2019 в 18:15 ----------

Dram:
в каком из последих годов более 10 значений и его уже использовать в выборке?

+

ORDER BY 1 DESC LIMIT 0,1

Выберет один "самый последний" год, где было больше 10

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
D
На сайте с 28.06.2008
Offline
996
#2

ivan-lev, спасибо, но я так и не сообразил как вставить все это во второй запрос?

Так мне выдало только 1 запись 2010 года

SELECT *
FROM `firm_items` as t1
INNER JOIN
firm_tovar AS t2 ON t2.item_id = t1.id
WHERE t1.rayon = 'Челябинск'
having COUNT(t2.year) > 10
ORDER BY 1 DESC LIMIT 0,1
IL
На сайте с 20.04.2007
Offline
418
#3

Подзапросом можно

WHERE t1.rayon = 'Челябинск' 
and t2.year IN (
SELECT year FROM ..
HAVING count(t.id) > 10
order by year DESC
LIMIT 0, 1
)
D
На сайте с 28.06.2008
Offline
996
#4

Ошибка синтаксиса, не пойму где


SELECT *
FROM `firm_items` as t1
INNER JOIN
firm_tovar AS t2 ON t2.item_id = t1.id
WHERE t1.rayon = 'Челябинск'
and t2.year IN (SELECT t2.year FROM HAVING count(t1.id) > 10
order by t2.year DESC
LIMIT 0, 1
)
IL
На сайте с 20.04.2007
Offline
418
#5
Dram:
Ошибка синтаксиса, не пойму где

Там в моём запросе же точки стоят.. Они обозначают пропуски.. =)

Предлагаю немного подумать

D
На сайте с 28.06.2008
Offline
996
#6

В вашем запросе как минимум три ошибки....

1. SELECT year вместо SELECT t2.year

2. count(t.id) вместо count(t1.id)

3. order by year вместо order by t2.year

Это я смог понять, но зачем там пропуски и что туда можно впендюрить... не понимаю :(

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