仅为表中的重复项获取最小值

时间:2017-06-30 14:23:16

标签: php mysql sql pdo

我有以下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',我只想获得最后两行,因为最上面一行是在不同时间的重复扫描。

谢谢

2 个答案:

答案 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