Mysql-запрос

topy
На сайте с 28.03.2006
Offline
142
377

Коллеги, что-то мозги кипят, вроде все просто, но не могу осилить.

Есть 2 таблицы:

kadry

userid | fio | active

1 | иванов | 1

2 | петров | 1

3 | сидоров | 1

4 | зайцев | 0

vznosy

userid | vz_year

1 | 2007

1 | 2008

1 | 2009

1 | 2010

1 | 2011

2 | 2010

2 | 2011

3 | 2011

4 | 2009

4 | 2010

Мне нужно вытащить всех должников...

т.е. что-то наподобие:


SELECT * FROM kadry,vznosy WHERE kadry.userid=vznosy.userid AND vznosy.vz_year<2012 group by kadry.userid

Нужно сделать выборку типа MAX(vznosy.vz_year)<2012 для каждого userid

Заранее благодарю откликнувшихся!

Новости коротко и ясно (https://subnews.ru)
edogs software
На сайте с 15.12.2005
Offline
775
#1

Не очень понятно что Вам нужно. Выбрать ID всех пользователей у кого нет взносов за 2012 год? Тогда

select distinct(userid) from kadry where user_id is not in (select userid from vznosy where vz_year=2012)
Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft
topy
На сайте с 28.03.2006
Offline
142
#2

Спасибо!!!

Да... Именно так и надо, но надо еще вытащить год последнего взноса каждого ID...

после исправления ошибочки запрос такой:


select distinct(userid) from kadry where userid not in (select userid from vznosy where vz_year=2010)
Joker-jar
На сайте с 26.08.2010
Offline
167
#3

select kadry.*, max(vznosy.vz_year) as maxyear from vznosy inner join kadry using userid group by userid having maxyear < year(curdate())

как то так

topy
На сайте с 28.03.2006
Offline
142
#4

Joker-jar, Спасибо, что-то не пойму, пишет ошибка, а где не пойму:


check the manual that corresponds to your MySQL server version for the right syntax to use near 'userid group by userid having maxyear < year(curdate())

UP, все, нашел, скобки!!

Правильно так:

select kadry.*, max(vznosy.vz_year) as maxyear from vznosy inner join kadry using (userid) group by userid having maxyear < year(curdate())

Всем огромное спасибо!!!

Joker-jar
На сайте с 26.08.2010
Offline
167
#5

писал с телефона, проверить негде. попробуйте "using userid" заменить на "on kadry.userid = vznosy.userid", хотя думаю грабли где то в другом

---------- Добавлено 24.01.2012 в 23:25 ----------

а, отлично

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