我正在使用MS SQL,需要一些关于如何构建查询的建议。基本上我有燃料交易文件(信用卡刷卡),并在其中捕获当前的里程表读数。我正在尝试使用车辆编号(车辆的唯一ID),交易日期和当前里程表读数来构建查询,以计算查看给定燃料交易的新列,找到先前的交易(基于交易日期) )对于该车辆交易,然后计算在两个数据点之间驱动的里程。
我正在努力识别先前的交易。任何帮助将不胜感激,以帮助我开始。我不是在寻找特定的脚本,但只是一些伪代码可以帮助我实现目标。
如果您想要具体,请参阅以下关键列。 CompanyVehicleNumber,TransactionDate(格式YYYYMMDD),TransactionTime(格式HHMMSS),里程表(例如123456)
感谢。
答案 0 :(得分:0)
您可以使用APPLY
获取上一笔交易:
SELECT
t.*, MilesDiff = t.odometer - x.odometer
FROM tbl t
OUTER APPLY(
SELECT TOP 1 odometer
FROM tbl
WHERE
CompanyVehicleNumber = t.CompanyVehicleNumber
AND (TransactionDate + TransactionTime) < (t.TransactionDate + t.TransactionTime)
ORDER BY (TransactionDate + TransactionTime) DESC
) x(odometer)
请注意,您需要将TransactionDate
和TransactionTime
转换为DATETIME
才能比较交易。
以下是转换日期和时间的一种方法:
DECLARE @date VARCHAR(8) = '20130101'
DECLARE @time VARCHAR(6) = '053000'
SELECT
CAST(@date AS DATETIME) +
CAST(LEFT(@time, 2) + ':' + SUBSTRING(@time, 3, 2) + ':' + RIGHT(@time, 2) AS DATETIME)