我正在尝试使用 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])

编辑 我也想保留额外的列。我做一个加入或something。

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

最佳答案

这应该有效:

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 的元组。根据 TimeStamp 的粒度,这可能无效。

Demo 2

有很多方法可以“过滤”上述结果。

例如。每个 BarCode ,最新的 TimeStampProducts 的最大值只有一个元组:
SELECT [Barcode], [Products], [TimeStamp]
FROM   [InventoryLocatorDB].[dbo].[Inventory] AS I
WHERE  [TimeStamp] = (SELECT MAX([TimeStamp])
                      FROM   [InventoryLocatorDB].[dbo].[Inventory]
                      WHERE  [Barcode] = I.[Barcode]) AND
       [Products]  = (SELECT MAX([Products])
                      FROM   [InventoryLocatorDB].[dbo].[Inventory]
                      WHERE  [Barcode] = I.[Barcode] and [TimeStamp] = I.[TimeStamp])

Demo 3

关于sql - 选择具有最大时间戳的唯一条形码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26341790/

10-13 07:49