sql—标识列是否按降序排列

clj7thdc  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(367)


我正在使用microsoft sql server 2014 management studio。我有点新,所以我希望我没有违反任何规则。我的数据是15列和近百万行,但我只是给你一个样本,以获得帮助,在一个领域,我卡住了。
在上面的示例中,您可以看到“lastlevel”列的值正在减小。您还可以看到“last_read”列日期范围中的数据是从今天到14天前(它是昨天运行的,因此是4月26日)。“shipto”列提供客户编号,每个客户有14行数据。
请忽略“当前读数”列
如果再看一下“lastlevel”,你会发现数值一直在下降,但是在4月18日,它从0.73降到了0.74,显示出0.01的增长。
我想做的是,每当有任何增加,我希望整个客户的14行从输出中删除,也就是说,我只希望看到客户有完美的降序数据,没有增加。
你能帮忙吗?

rsaldnfx

rsaldnfx1#

WITH
  deltas AS
(
  -- For each [Shipto]; deduct the preceding row's value and record it as the [delta]
  -- Note, each [Shipto]'s first row's delta with therefor be NULL
  SELECT
    *,
    lastlevel - LAG(lastlevel) OVER (PARTITION BY Shipto ORDER BY Last_Read, lastlevel DESC)  AS delta
  FROM
    yourTable
),
  max_deltas AS
(
  -- Get the maximum of the deltas per [Shipto]
  SELECT
    *,
    MAX(delta) OVER (PARTITION BY Shipto) AS max_delta
  FROM
    deltas
)
-- Return only rows where the delta never exceeds 0 (thus, never ascending over any timestep)
SELECT
  *
FROM
  max_deltas
WHERE
  max_delta <= 0

我已经点菜了 Last_Read, lastlevel DESC 因此,如果两个读数在同一日期,则假定最高值应首先出现。

相关问题