Вывести строки из бд с определенным значением - MySQL

Узнай цену своей работы

Формулировка задачи:

Есть таблица: id дата Номер Результат 1 2017-04-20 50000 Да 2 2017-04-21 50000 Нет 3 2017-04-20 40000 Нет 4 2017-04-21 40000 Нет 5 2017-04-23 30000 Да 6 2017-04-20 30000 Нет Как выбрать строки со значением поля 'Результат'='Нет' в которых поле "Номер" с максимальной датой не равно 'ДА'? т.е. получится вывод строк с id=2,4.
SELECT 
* FROM `table1` as t1
group by numer
having (select max(data) from `table1` where rez='Нет' and nomer=t1.nomer group by numer)>=
(select max(data) from from `table1` where rez='Да' and nomer=t1.nomer group by numer)
order by nomer
выводит чуть ли не все строки и нужные и не нужные. Может быть вы что-то подскажете умное.

Решение задачи: «Вывести строки из бд с определенным значением»

textual
Листинг программы
SELECT 
  table1.*
FROM
  (SELECT numer, MAX(DATA) mdata FROM table1 GROUP BY numer) maxD 
  JOIN table1 ON table1.numer = maxD.numer AND table1.data = maxD.mdata
WHERE
  table1.Результат = 'Нет'

Объяснение кода листинга программы

  1. Создается подзапрос, который выбирает максимальное значение данных для каждого уникального значения в столбце numer таблицы table1.
  2. Результат этого подзапроса сохраняется в временной таблице с именем maxD.
  3. Основной запрос выполняет соединение (JOIN) между таблицей table1 и временной таблицей maxD по столбцам numer и mdata.
  4. Фильтр WHERE применяется к результатам соединения для выбора только тех строк, где значение в столбце Результат равно 'Нет'.

Оцени полезность:

12   голосов , оценка 3.833 из 5
Похожие ответы