我想排名一系列交易,但是我的源数据并没有捕获一天可能发生多次的交易时间,我唯一可以使用的其他字段是timestamp
字段 - 这将排名是否正确?使用时间戳和日期时间的TSQL排名
下面的代码
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
我明白答案,但upvote很好奇。 OP很清楚地表明日期栏中没有时间分量。 –
'TimeStamp'上没有'TrnDate',而是'SELECT CAST(0x0000000000500AB9 as datetime)'给出了这个:'1900-01-01 04:51:25.417'。 – gofr1
我应该补充说,将'timestamp' /'rowversion'视为实际的日期,时间或日期时间值在SQL Server中显然是一个坏主意。 upvotes从哪里来? –