【问题标题】:Select unique barcode with max timestamp选择具有最大时间戳的唯一条形码
【发布时间】:2014-10-13 13:57:45
【问题描述】:

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

编辑我也想保留其他列。我要加入还是做一些事情。

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

【问题讨论】:

  • 这是关于 SO 的一个非常受欢迎的问题,有很多例子。这是One example
  • 感谢当它们不够具体而且我仍然缺乏经验时很难解析。

标签: sql sql-server


【解决方案1】:

这应该可行:

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只有一个元组,最新的TimeStamp,最大值Products

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    • 2014-02-06
    • 2013-08-28
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    相关资源
    最近更新 更多