gpt4 book ai didi

sql-server - 使用时间戳和日期时间的 TSQL 排名

转载 作者:行者123 更新时间:2023-12-01 11:25:30 27 4
gpt4 key购买 nike

我正在尝试对一系列交易进行排名,但是我的源数据没有捕获一天可能发生多次的交易时间,我唯一可以使用的其他字段是时间戳 字段 - 这会被正确排名吗?

这是代码

SELECT [LT].[StockCode]
, [LT].[Warehouse]
, [LT].[Lot]
, [LT].[Bin]
, [LT].[TrnDate]
, [LT].[TrnQuantity]
, [LT].[TimeStamp]
, LotRanking = Rank() Over (Partition By [LT].[Warehouse],[LT].[StockCode],[LT].[Lot] Order By [LT].[TrnDate] Desc, [LT].[TimeStamp] Desc)
From [LotTransactions] [LT]

返回结果如下

StockCode   |Warehouse  |Lot    |Bin    |TrnDate                    |TrnQuantity    |TimeStamp          |LotRanking
2090 |CB |3036 |CB |2016-02-16 00:00:00.000 |2.000000 |0x0000000000500AB9 |1
2090 |CB |3036 |CB |2016-02-16 00:00:00.000 |2.000000 |0x0000000000500A4E |2

最佳答案

首先,您应该使用 rowversion 而不是 timestamp 来跟踪行版本控制信息。我相信 timestamp 已被弃用。至少,文档明确建议 [rowversion][1]

其次,我强烈建议您向表中添加标识列。这将提供您真正需要的信息——以及表的一个很好的唯一键。

通常,timestamprowversion 仅用于确定行是否已更改 -- 而不是确定顺序。但是,根据此描述,您所做的可能是正确的:

Each database has a counter that is incremented for each insert or update operation that is performed on a table that contains a timestamp column within the database. This counter is the database timestamp. This tracks a relative time within a database, not an actual time that can be associated with a clock. A table can have only one timestamp column. Every time that a row with a timestamp column is modified or inserted, the incremented database timestamp value is inserted in the timestamp column.

我会警告说这可能不安全。相反,它给出了为什么这种方法可能有意义的原因。让我重复一下建议:添加一个标识列,这样您就可以正确地添加此信息,至少在将来是这样。

关于sql-server - 使用时间戳和日期时间的 TSQL 排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37677392/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com