gpt4 book ai didi

Mysql:按书名分组(但也按最后更新的成本)

转载 作者:行者123 更新时间:2023-11-29 23:00:25 26 4
gpt4 key购买 nike

我需要展示客户(ID)平时消费的所有产品,有些产品有特价。当然,客户可以再次购买相同的产品,但可能会以不同的价格..

Structure orders table
CREATE TABLE orders (
order_id mediumint(8) unsigned not null auto_increment,
cl_id mediumint(8) unsigned not null default '0',
order_date int(10) unsigned not null default '0',
order_note varchar(255) not null default '',
PRIMARY KEY (order_id),
KEY cl_id (cl_id)
);

所以,这是我的 sql:

SELECT cl.cl_name, or.order_id, pro.pro_name, detal.detal_price
FROM consumers cl
LEFT JOIN orders or
ON cl.cl_id = or.cl_id
LEFT JOIN order_detail detal
ON or.order_id = detal.order_id
LEFT JOIN products pro
ON detal.pro_id = pro.pro_id
WHERE cl.cl_id = 5
GROUP BY pro.pro_name

好的,我使用“分组依据”来不重复相同的产品名称。但我也需要显示价格,但最后更新的价格。我认为需要使用“order_date”,但我需要一些帮助。

最佳答案

您可以使用substring_index()/group_concat()技巧来获取最后的价格:

SELECT c.cl_name, p.pro_name,
substring_index(group_concat(d.detal_price order by order_date desc), ',', 1) as MostRecentPrice
FROM consumers cl LEFT JOIN
orders o
ON c.cl_id = o.cl_id LEFT JOIN
order_detail detal
ON o.order_id = d.order_id LEFT JOIN
products p
ON d.pro_id = p.pro_id
WHERE c.cl_id = 5
GROUP BY c.cl_name, p.pro_name;

我对查询做了一些其他更改:

  • 修复了表别名。因为 or 是 SQL 中的关键字,所以它对于表别名来说是一个糟糕的选择。我全部都做空了。
  • c.cl_name 添加到分组依据。这在 MySQL 中不需要,但在其他方言中则需要。另外,避免查询错误是一个好习惯。
  • 删除了order_id。这在您的查询中毫无意义,因为您没有在订单级别聚合。

关于Mysql:按书名分组(但也按最后更新的成本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28517174/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com