2016-12-28 8 views
-1

Мне нужно установить, где STATUS = Need Corrections при их последней записи.Возврат неожиданного набора при использовании max() в MySql

Для данного набора: Table:QC мне нужно 3-й и 5-й ряд, потому что последняя запись (т.е.) макс (вход) порядка ORD001 является 2 и макс (вход) порядка ORD003 является 1, и они имеет статус «Нужны исправления».

Я пробовал эти запросы, но получал неправильный результат.

SELECT * FROM QC WHERE STATUS = «Нужны исправления» и введите (SELECT MAX (ENTRY) FROM QC) GROUP BY PRD_ORDER; Result when using 'group by'

SELECT * FROM QC WHERE STATUS = 'Need Corrections' AND ENTRY IN(SELECT MAX(ENTRY) FROM QC) ORDER BY PRD_ORDER; 

Result when using 'order by'

+0

1. 2 выборки запросов одинаковы. 2. Вы получите ошибку синтаксиса, а не ошибочный результат для образца запроса, так как 'order' является зарезервированным словом. – Shadow

+0

ваш код не работает на многих уровнях. –

+0

* «Я пробовал эти запросы, но получал неправильный результат». * - Теперь у вас есть это, вы не должны получать * любые * результаты, но * синтаксические ошибки *. –

ответ

0

Вы не так далеко

MariaDB [sandbox]> create table t(id int ,pr_order varchar(10),entry int, status varchar(20)); 
Query OK, 0 rows affected (0.14 sec) 

MariaDB [sandbox]> insert into t values 
    -> (1,'o1',1,'NC'), 
    -> (2,'o2',1,'NC'), 
    -> (3,'o1',2,'NC'), 
    -> (4,'o2',2,'F'), 
    -> (5,'o3',1,'F'); 
Query OK, 5 rows affected (0.00 sec) 
Records: 5 Duplicates: 0 Warnings: 0 

MariaDB [sandbox]> 
MariaDB [sandbox]> select t.* 
    -> from t t 
    -> where t.status = 'NC' 
    -> and t.entry = (select max(t1.entry) from t t1 where t1.pr_order = t.pr_order); 
+------+----------+-------+--------+ 
| id | pr_order | entry | status | 
+------+----------+-------+--------+ 
| 3 | o1  |  2 | NC  | 
+------+----------+-------+--------+ 
1 row in set (0.00 sec) 
+0

Точно это г-н Спасибо. :) –