我有一张这样的表:
id, customer_id, item_id, field, value
以下是一些示例数据:
id, cid, iid, field, value
1, 100, 1000, 'rating', 10
2, 100, 1000, 'rating', 15
3, 100, 1000, 'worth', 20
4, 100, 1000, 'worth', 25
5, 100, 1100, 'rating', 35
6, 100, 1100, 'rating', 30
7, 100, 1100, 'worth', 35
8, 100, 1100, 'worth', 30
9, 200, 2000, 'rating', 20
10, 200, 2000, 'rating', 25
11, 200, 2000, 'worth', 40
12, 200, 2000, 'worth', 45
13, 200, 2100, 'rating', 30
14, 200, 2100, 'rating', 35
15, 200, 2100, 'worth', 50
16, 200, 2100, 'worth', 55
我一直在尝试编写一个查询,只返回某个客户所有项目的所有字段的最新值。
对于客户100,它将返回:
id, cid, iid, field, value
2, 100, 1000, 'rating', 15
4, 100, 1000, 'worth', 25
6, 100, 1100, 'rating', 30
8, 100, 1100, 'worth', 30
对于客户200,它将返回:
id, cid, iid, field, value
10, 200, 2000, 'rating', 25
12, 200, 2000, 'worth', 45
14, 200, 2100, 'rating', 35
16, 200, 2100, 'worth', 55
可以有无限数量的不同字段,每个客户的每个项目的每个字段可以有无限量的值。
值每小时不断变化,我希望查询只返回某个客户所有项目的所有字段的最新值。
可以使用基本的WHERE cid ='1'来限制cid,但我不知道如何对查询进行分组以获得每个字段和每个项目的一个值。我知道我可以通过为每个字段找到MAX(id)来获得最新信息,但我不知道如何使用一个查询来完成它。
我可以使用多个查询和一些PHP来执行此操作但是可以使用单个查询来执行此操作吗?
答案 0 :(得分:0)
使用子查询从表中获取“每X的最大|最小值”,将该子查询连接到X = X和max | min = value的表中,以获得max | min的完整行发生在。