计算交易与其先前交易之间的价值差异

时间:2016-01-07 03:11:38

标签: sql sql-server

我正在使用MS SQL,需要一些关于如何构建查询的建议。基本上我有燃料交易文件(信用卡刷卡),并在其中捕获当前的里程表读数。我正在尝试使用车辆编号(车辆的唯一ID),交易日期和当前里程表读数来构建查询,以计算查看给定燃料交易的新列,找到先前的交易(基于交易日期) )对于该车辆交易,然后计算在两个数据点之间驱动的里程。

我正在努力识别先前的交易。任何帮助将不胜感激,以帮助我开始。我不是在寻找特定的脚本,但只是一些伪代码可以帮助我实现目标。

如果您想要具体,请参阅以下关键列。 CompanyVehicleNumber,TransactionDate(格式YYYYMMDD),TransactionTime(格式HHMMSS),里程表(例如123456)

感谢。

1 个答案:

答案 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)

请注意,您需要将TransactionDateTransactionTime转换为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)
相关问题