选择具有最大时间戳的唯一条形码

时间:2014-10-13 13:57:45

标签: sql sql-server

我正在尝试使用Microsoft SQL Server编写SQL查询。

我的表与此类似:

bardcode |  products |      timestamp

1234     |  12       | 2013-02-19 00:01:00
1234     |  17       | 2013-02-19 00:01:00
432      |  10       | 2013-02-19 00:01:00
432      |   3       | 2013-02-19 00:02:00
643      |  32       | 2013-02-19 00:03:00
643      |   3       | 2013-02-19 00:03:00
123      |  10       | 2013-02-19 00:04:00

我正在尝试根据最新的时间戳获取一系列独特的条形码。

这是我一直在考虑的无效查询:

    SELECT DISTINCT [Barcode], [Timestamp]
    FROM [InventoryLocatorDB].[dbo].[Inventory]
    WHERE max([Timestamp]) 

编辑我还想保留其他列。我是加入还是做某事。

例如,我想选择带有最新时间戳的条形码,并希望所有其他列信息都附带,例如产品专栏

1 个答案:

答案 0 :(得分:3)

这应该有效:

SELECT   [Barcode], max([TimeStamp])
FROM     [InventoryLocatorDB].[dbo].[Inventory]
GROUP BY [Barcode]

Demo

修改

SELECT [Barcode], [Products], [TimeStamp]
FROM   [InventoryLocatorDB].[dbo].[Inventory] AS I
WHERE  [TimeStamp] = (SELECT MAX([TimeStamp])
                      FROM   [InventoryLocatorDB].[dbo].[Inventory]
                      WHERE  [Barcode] = I.[Barcode])

查询使用相同的BarCode / TimeStamp保留元组。根据{{​​1}}的粒度,这可能无效。

Demo 2

有许多方法可以过滤"以上结果。

E.g。每个TimeStamp只有一个元组,最新BarCode,最大值TimeStamp

Products

Demo 3