MySql 使用嵌套查询检查最旧的记录与当前记录

标签 mysql self-join subquery

我的脑子在旋转,试图找出我需要使用的 SQL 查询。我尝试了各种嵌套查询和自连接,但一切都让我失败。我想我想太多了。

基本思想:我有一个表,我们称之为 OrderTable,表中有四个(相关)字段:OrderIdCustomerId餐厅ID订购时间

当客户下订单时,日期/时间戳会添加到 OrderTime 字段中。其他三个字段只是整数,其中 OrderId 字段为主键(并且自动递增)。

我正在尝试编写一个查询,该查询将返回 CustomerId 记录列表,其中该客户的第一条记录(最早日期)是特定日期(假设“2012-03-14”) ),RestaurantId 是一个特定的数字(假设是 29)。

目前我只能假设这是一种过于复杂的方法。另外,当有多个记录与我的子查询匹配时,我当前收到错误“#1242 - 子查询返回超过 1 行”。

有人可以帮我提供更优雅的解决方案吗?谢谢!

当前查询:

SELECT `CustomerId` 
FROM `OrderTable` 
WHERE `OrderTime` LIKE '%2012-03-14%' 
AND `RestaurantId`='29' 
AND `OrderId`=(SELECT `OrderId` 
   FROM `OrderTable` 
   WHERE `RestaurantId`='29' 
   GROUP BY `CustomerId` 
   ORDER BY `OrderTime` ASC
   )

最佳答案

编辑:John Totet Woo 在这一点上可能是正确的,但仍请参阅我帖子的第二部分以避免使用 LIKE 子句:)

我可能对您的要求有点困惑,但是如果您将子查询从“=”更改为 IN,您会得到您想要的结果吗?

SELECT `CustomerId` 
FROM `OrderTable` 
WHERE `OrderTime` LIKE '%2012-03-14%' 
AND `RestaurantId`='29' 
AND `OrderId` IN (SELECT `OrderId` 
    FROM `OrderTable` 
    WHERE `RestaurantId`='29' 
    GROUP BY `CustomerId` 
    ORDER BY `OrderTime` ASC
) 

最让我困扰的是,你可以使用

AND DATE(OrderTime) = '2012-03-14'

而不是LIKE

关于MySql 使用嵌套查询检查最旧的记录与当前记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11972415/

相关文章:

mysql将两行合并为一行

mysql - 基于星期几列透视 MySQL 表

php - yii2 根据模型更新表单预选下拉选项

MySQL:将两行合并为一行?

mysql - 使用自连接的 SQL 查询

mysql - MySQL 中的 "Truncated incorrect DOUBLE value"

mysql - SQL SERVER COUNT 查询

javascript - 从 getTime() 类型的日期获取日期和时间以显示 mySQL 数据库中的日期

javascript - 使用带有sequelizejs的日期来统计客户今年的订单

ruby-on-rails - Rails 3 中的自引用模型