mysql - 使用group by查询两个db并显示详细信息

标签 mysql

我有两张 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/

相关文章:

php - 在 PHP 和 MySQL 中显示我的帖子以及关注者的帖子

php - "No database selected"错误,即使在选择了数据库之后

MySQL查询查找相似但不重复的行

php - MySQL 全文搜索不适用于某些单词

php - Mysql查询重载VPS

python - 使用python在django中将数据库转换为csv

php - SQL_MODE 不适用于 MySQL 5.7.18

mysql group 通过使用范围记录值

PHP MySQLi 转义引号

mysql - 常量表设计 MySQL 最佳实践