我有两张 table
1:项目信息
product_id brand name category
1 Garden Goodcake cake
2:项目记录
record_id shopType price inputTime product_id
1 0 7.2 2012-03-20 17:58:56 1
69 2 6.4 2012-03-20 19:33:12 1
70 0 9.9 2012-03-19 00:00:00 1
71 3 5.5 2012-03-18 05:22:00 1
72 0 6.8 2012-03-19 20:26:29 1
73 0 10.1 2012-03-17 12:27:00 1
74 3 7.9 2012-03-16 00:00:00 1
75 1 6.7 2012-03-15 00:00:00 1
76 1 8.8 2012-03-14 11:24:00 1
77 2 12.5 2012-03-13 10:26:19 1
78 0 7.2 2012-03-21 11:25:23 1
146 2 5 2012-03-21 12:53:04 1
149 3 4.9 2012-03-21 10:00:00 1
150 3 5.1 2012-03-21 12:20:00 1
我想显示product_id = 1的最近7天的最便宜价格。
如果同一天,最便宜的价格相同,则显示最新的。
最终的表应该是:
product_id brand name category inputTime shopType minimum_price record_id
1 Garden Goodcake cake 2012-03-21 3 4.9 149
1 Garden Goodcake cake 2012-03-20 2 6.4 69
1 Garden Goodcake cake 2012-03-19 2 6.8 72
...
1 Garden Goodcake cake 2012-03-15 1 6.7 75
我已尽力编写如下sql:
SELECT r.product_id, i.brand, i.name, i.category, DATE_FORMAT( r.inputTime, '%e-%b' ) AS inputTime, r.shopType, MIN( r.price ) AS minimum_price, r.record_id
FROM itemRecord AS r, itemInfo AS i
WHERE r.product_id = '1'
AND i.id = r.product_id
GROUP BY DATE( r.inputTime ) DESC
LIMIT 0 , 7
但是,该表是:
product_id brand name category inputTime shopType minimum_price record_id
1 Garden Goodcake cake 21-Mar 0 4.9 78
1 Garden Goodcake cake 20-Mar 0 6.4 1
1 Garden Goodcake cake 19-Mar 0 6.8 70
1 Garden Goodcake cake 18-Mar 3 5.5 71
1 Garden Goodcake cake 17-Mar 0 10.1 73
1 Garden Goodcake cake 16-Mar 3 7.9 74
1 Garden Goodcake cake 15-Mar 1 6.7 75
例如第一行结果,它显示正确的最低价格4.9,但是record_id错误,shopType也错误。
我研究了很多,但仍然无法解决问题。
请帮忙...
最佳答案
加入他们:
SELECT r.product_id, i.brand, i.name, i.category, DATE_FORMAT( r.inputTime, '%e-%b' ) AS inputTime, r.shopType, r.price AS minimum_price, r.record_id
FROM ( SELECT *
FROM itemRecord
WHERE product_id = '1'
ORDER BY price ASC, inputTime DESC) AS r
INNER JOIN itemInfo As i
ON r.product_id = i.product_id
WHERE i.id = r.product_id
GROUP BY DATE(r.inputTime)
LIMIT 0, 7
说明:
我做了一个内部查询,它按 price ASC
而不是默认值呈现表顺序,比如说 id ASC
。当您对行进行GROUP BY
时,它默认使用第一行中的列,在本例中是价格最低的列。
您的解决方案不起作用,因为它也可能选择了第一个 id 而不是最低价格行。唯一正确的列是 MIN( r.price ),但正如您所注意到的,该函数不会影响结果中的其他列。
关于mysql - 使用group by查询两个db并显示详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9801484/