gpt4 book ai didi

sql - 如何选择数字随着日期增加而减少的行

转载 作者:行者123 更新时间:2023-12-03 00:31:53 25 4
gpt4 key购买 nike

如果我在维修店有一个程序,并且我想选择 RepairOrder 表中的所有汽车,其中后一个维修订单的里程小于前一个维修订单的里程,我该如何构建该选择声明?

ID  VehicleID  Mileage  RepairDate
01 1 18425 2013-08-13
02 1 28952 2013-02-26
03 2 22318 2012-08-27
04 3 21309 2012-08-07
05 3 16311 2012-02-27
06 3 16310 2012-02-11
07 4 11098 2011-03-23
08 5 21309 2012-08-07
09 5 16309 2012-02-27
10 5 16310 2012-02-11

在这种情况下,我应该只选择 VehicleID 1,因为它的 RepairDate 大于前一行,但 Mileage 小于前一行。同一辆车也可能有 3 行,中间日期的里程数为 3 或 5000000,我还需要选择这些车辆 ID。

使用 LEAD() 函数的结果

ID  RepairDate  Mileage
25 2011-12-23 45934
48 2009-02-26 13
48 2009-04-24 10
71 2011-07-26 31163
71 2015-01-13 65656

最佳答案

这是一个使用 LEAD() 的好地方SQL 2014+ 的函数

SQL FIDDLE DEMO

WITH NextM as (
SELECT
* ,
LEAD(Mileage, 1, null) over (partition by VehicleID order by RepairDate) NextMileage
FROM RepairOrder
)
SELECT *
FROM NextM
WHERE Mileage > NextMileage

我的解决方案显示所有列,以便您可以检查哪一行有问题。

此外,我避免使用 distinct 因为正如OP建议的那样,同一辆车可能会出现多个错误,这样你就可以看到全部。 enter image description here

关于sql - 如何选择数字随着日期增加而减少的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32389564/

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