我有以下 SQL:
set @arbitraryMin = 'two weeks ago';
set @myDesiredMinimumTime = 'thisMorning';
select distinct order, box from db.table
where scantime >= @arbitraryMin
having min(scantime) >= @myDesiredMinimumTime
本质上,我们有一个系统,可以对不同的盒子/订单组合进行多次扫描。我只想获得最小扫描时间 >= @myDesiredMinimumTime 的那些。上面的查询返回两列,其中没有值。我可以使用子查询来完成此操作,但我想知道是否有一种方法可以在不使用子查询的情况下完成此操作。
我不是 SQL 专家,所以我感谢任何帮助。表格示例(格式抱歉):
扫描时间|订单|框
2017-06-29 12:34:56 | 123456 | 123
2107-06-29 12:12:12 | 123456 | 124
2017-06-28 14:50:00 | 123456 | 123
请注意第 1 行和第 3 行不同日期的两个重复的订单/盒子组合。如果我使用 @ ArbitaryMin = '2017-06-28 00:00:00' 和 @myDesiredMinimumTime = '2017-06- 输入查询29 00:00:00',我只想获取最后两行,因为顶部一行是在不同时间进行的重复扫描。
谢谢
最佳答案
这是一个无效的 SQL。如果没有 GROUP BY
,则不能有 HAVING
子句。所以下面的行是错误的
having min(scantime) >= @myDesiredMinimumTime
您应该仅将该条件放在 WHERE
子句中
where scantime >= @arbitraryMin
and (select min(scantime) from db.table) >= @myDesiredMinimumTime
关于php - 仅获取表中重复项的最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44848746/