Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 获取项目的最后状态_Mysql_Group By_Greatest N Per Group - Fatal编程技术网

Mysql 获取项目的最后状态

Mysql 获取项目的最后状态,mysql,group-by,greatest-n-per-group,Mysql,Group By,Greatest N Per Group,在MySQL中,我有两个1:n关系的表 表项具有产品,其状态保存在另一个表中,如下所示: 项目: id |ref_num|name |... 1 |0001 |product1|... 2 |0002 |product2|... 项目11说明: id|product_id|state_id|date 1 |1 |5 |2010-05-05 10:25:20 2 |1 |9 |2010-05-08 12:38:00 3 |

在MySQL中,我有两个1:n关系的表

表项具有产品,其状态保存在另一个表中,如下所示:

项目:

id |ref_num|name    |...
1  |0001   |product1|...
2  |0002   |product2|...
项目11说明:

id|product_id|state_id|date
1 |1         |5       |2010-05-05 10:25:20
2 |1         |9       |2010-05-08 12:38:00
3 |1         |6       |2010-05-10 20:45:12
...
states表不相关,仅将state_id与state name等关联

如果最新的状态是我指定的,每行一项,我如何获得产品


谢谢

您可以尝试以下方法:

SELECT i.ref_num, i.name, s.latest_date
FROM   items i
JOIN   (
           SELECT   product_id, MAX(date) as latest_date
           FROM     items_states
           GROUP BY product_id
       ) s ON (s.product_id = i.id);
如果只想返回一项,只需在查询中添加一个
其中i.id=?

测试用例:

CREATE TABLE items (id int, ref_num varchar(10), name varchar(10));
CREATE TABLE items_states (id int, product_id int, state_id int, date datetime);

INSERT INTO items VALUES (1, '0001', 'product1');
INSERT INTO items VALUES (2, '0002', 'product2');

INSERT INTO items_states VALUES (1, 1, 5, '2010-05-05 10:25:20');
INSERT INTO items_states VALUES (2, 1, 9, '2010-05-08 12:38:00');
INSERT INTO items_states VALUES (3, 1, 6, '2010-05-10 20:45:12');
结果:

+---------+----------+---------------------+
| ref_num | name     | latest_date         |
+---------+----------+---------------------+
| 0001    | product1 | 2010-05-10 20:45:12 |
+---------+----------+---------------------+
1 row in set (0.02 sec)

要么左键将items_states表连接到自身,需要second.date>first.date,并在其中放入WHERE second.id为NULL子句:

SELECT a.* 
FROM item_states a 
LEFT JOIN item_states b
ON a.product_id = b.product_id
AND b.product_id > a.product_id
WHERE b.id IS NULL AND a.state_id = <desired state>
选择一个*
来自第_项a
左连接项_状态b
在a.product\u id=b.product\u id上
b.产品id>a.产品id
其中b.id为NULL,a.state\u id=
或者进行基于行的查询:请参见“示例”