Вывести строки из бд с определенным значением - 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.Результат = 'Нет'
Объяснение кода листинга программы
- Создается подзапрос, который выбирает максимальное значение данных для каждого уникального значения в столбце
numer
таблицыtable1
. - Результат этого подзапроса сохраняется в временной таблице с именем
maxD
. - Основной запрос выполняет соединение (JOIN) между таблицей
table1
и временной таблицейmaxD
по столбцамnumer
иmdata
. - Фильтр WHERE применяется к результатам соединения для выбора только тех строк, где значение в столбце
Результат
равно 'Нет'.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д