0

我编写了一个应用程序,其中记录了许多车辆的使用情况,如屏幕截图所示。

我想为个人使用之间的差距(以英里为单位)生成一份报告,因为除了应用程序中记录的旅行之外,不应使用这些车辆。

当当前记录请求里程表时会出现间隙 - 先前记录结束里程表产生大于 0 的数字 - 对于该特定汽车。查看不同颜色的圆圈。我怎样才能用 sql 实现这一点?我正在使用 oracle (11g) 但我想 sql 会相似。谢谢你。

样本输出:

  Vehicle V06
  Invoice Date   Dest   Gap 
  123     1/2/14 York   14.0
  122     1/1/14 Pburg   0.0
  Vehicle V05
  Invoice Date   Dest   Gap 
  121     1/3/14 Mill    0.0

车辆使用数据库
* 我意识到我应该使用包含差距的测试数据,尽管这些在实践中应该很少见。在这种情况下,

  Invoice 67189 would have End Od of 92590 resulting in a GAP of 3.0 miles for 67190
4

2 回答 2

2

只需使用lag()

select vu.*
from (select vu.*,
             lag(endod) over (partition by vehicle order by date) as prev_endod
      from vehicleusage vu
     ) vu
where begod <> prev_endod;

请注意,NULL值的比较将失败,因此车辆的第一次记录没有问题。

于 2014-11-05T16:43:48.330 回答
0
 SELECT 
    D1.invoiceNo, 
    D1.vehicalId, 
    CASE WHEN D1.odBeg > D0.odEnd THEN 'MISSING MILES' ELSE 'EXTRA MILES' END AS Notes
 FROM
    (SELECT vehicalId,invoiceNo, RANK() OVER(PARTITION BY vehicalId ORDER BY dateUsed) AS KEY_CUR, odBeg,odEnd FROM @DATA) AS D0
    INNER JOIN 
    (SELECT vehicalId,invoiceNo, RANK() OVER(PARTITION BY vehicalId ORDER BY dateUsed) - 1 AS KEY_LAST, odBeg,odEnd FROM @DATA) AS D1
    ON D0.vehicalId = D1.vehicalId AND D0.KEY_CUR = D1.KEY_LAST
 WHERE
    D1.odBeg <> D0.odEnd
于 2014-11-05T15:42:22.190 回答