mysql - 如何查询一行

标签 mysql

我有下表(订单)

<表类=“s-表”> <标题> 订单ID 客户ID(varchar) articleID (varchar) 日期(日期时间) <正文> 1 c1 9012、9011、9013 2023-09-19T01:15 2 c1 9013 2023-08-12T09:35 3 c2 9052、9053、9054 2023-09-17T11:16 4 c3 9011、9063 2023-09-12T03:24 5 c4 9011、9033 2023-09-09T09:09 6 c4 9099、9121、9356 2023-09-17T08:55 7 c2 9012、9011 2023-08-19T07:11 8 c5 9056、9001、9078 2023-09-19T06:25

现在我正在尝试制定一个查询来回答以下问题:哪个客户上次购买了商品 x? 例如,我想知道articleId 9011的这个,我的期望是我会得到c1 2023-09-19T01:15返回。

select customerID, max(orderdate) as d
from orders
where articleIDs like '%9011%'
group by customerID
order by d desc
limit 1;

这个查询正在做我想要的事情。但是还有其他/更好的解决方案吗?

最佳答案

您可以使用FIND_IN_SET函数搜索以逗号分隔的字符串中的值。

    SELECT customerID, MAX(orderdate) AS last_purchase_date
      FROM orders
     WHERE FIND_IN_SET('9011', REPLACE(articleIDs, ' ', '')) > 0
  GROUP BY customerID
  ORDER BY last_purchase_date DESC
     LIMIT 1;

关于mysql - 如何查询一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77139884/

相关文章:

php - Magento 2 产品集合显示查询

php - 从按日期命名的多个表中选择一个范围

mysql - 在 sequelize 中检查 mysql 连接

php - wordpress 3.8版本上传图片出现错误

mysql加载数据infile

mysql - 如何使用与主键具有不同列名的外键?

php - 在 mysqli_connect 上指定套接字选项

mysql - 从 MySQL 存储过程 Ping 网站

mysql - MySQL Query 是否包含子查询原子?

mysql - sql select where子句问题