我有以下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大师,所以我感谢任何帮助。表格样本(抱歉格式):
scantime |订单|方框
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行中不同日期的两个重复的订单/框组合。如果我使用@arbitraryMin ='2017-06-28 00:00:00'和@myDesiredMinimumTime ='2017-06-输入我的查询29 00:00:00',我只想获得最后两行,因为最上面一行是在不同时间的重复扫描。
谢谢
答案 0 :(得分:0)
这是一个无效的SQL。没有HAVING
,您不能拥有GROUP BY
条款。所以下面的行是错误的
having min(scantime) >= @myDesiredMinimumTime
您应该将该条件仅放在WHERE
子句中
where scantime >= @arbitraryMin
and (select min(scantime) from db.table) >= @myDesiredMinimumTime
答案 1 :(得分:0)
谢谢Rahul。 我找到了一个解决方案:
SELECT dbo.Sell_Items.id_Sell,
(SELECT top 1 dbo.Sell_Image.ImageUr
FROM dbo.Sell_Image
WHERE dbo.Sell_Items.id_Sell = dbo.Sell_Image.sell_id
ORDER BY dbo.Sell_Image.Id) 'ImageUr'
FROM dbo.Sell_Items