【发布时间】:2020-08-13 22:12:38
【问题描述】:
我有一个包含两个表的数据库。一个保存商品数据,一个保存另一张表中商品的价格统计信息。
物品表 itemid (int, 自增) |名称 (varchar) |描述 (varchar) | added_on(日期时间)
统计表: id (int, 自增) |项目 (int) |价格(整数) | date_seen (日期时间)
第一个表中的“itemid”列是唯一的,在第二个表中被引用为“item”每次检查一个项目的价格时,如果价格与上次相比发生变化,它就会被添加到统计表中已被检查
例如,表格如下所示:
Item Table
itemid (int, auto increment) | name (varchar) | description (varchar) | added_on (datetime)
1 | testproduct1 | This is a testproduct | 2020-04-23 16:43:47
2 | testproduct2 | This is a testproduct too | 2020-04-23 17:08:32
stats table:
id (int, auto increment) | item (int) | price (int) | date_seen ( datetime )
1 | 1 | 7 | 2020-04-23 09:12:00
2 | 1 | 4 | 2020-04-23 09:34:00
3 | 2 | 8 | 2020-04-23 09:12:00
4 | 2 | 6 | 2020-04-23 09:34:00
5 | 1 | 3 | 2020-04-23 10:08:00
6 | 2 | 4 | 2020-04-23 10:08:00
假设我想获得今天添加的 Top5 项目,按 last_seen DESC 排序,然后按价格 DESC 排序,因此您将获得以下输出:
NAME |PRICE| date_seen
testproduct2 | 4 | 2020-04-23 10:08:00
testproduct1 | 3 | 2020-04-23 10:08:00
我会怎么做呢?我尝试了以下
SELECT *
FROM (
SELECT
i.itemid,
i.name,
s.price,
s.date_seen AS sdate,
FROM
items i
INNER JOIN stats s
ON i.itemid = s.item
WHERE i.added_on LIKE '2020-04-23%'
) AS sub
ORDER BY `sub`.`sdate` DESC,`sub`.`price` DESC
GROUP BY i.itemid
但是,这里似乎不允许 group by,没有它,查询可以工作,我得到的结果是按日期排序的,但价格根本没有排序。获得所需结果的正确查询是什么?提前致谢!
【问题讨论】:
-
请学习如何正确使用
GROUP BY。GROUP BY没有聚合有什么意义?SELECT * ... GROUP BY不应该运行,因为它没有意义。
标签: mysql sql date join greatest-n-per-group