我的脑子在旋转,试图找出我需要使用的 SQL 查询。我尝试了各种嵌套查询和自连接,但一切都让我失败。我想我想太多了。
基本思想:我有一个表,我们称之为 OrderTable
,表中有四个(相关)字段:OrderId
、CustomerId
,餐厅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/