gpt4 book ai didi

sql - PostgreSQL : Check if the last number is the highest

转载 作者:行者123 更新时间:2023-11-29 13:27:41 24 4
gpt4 key购买 nike

我有大型数据库,其中一个字段应该是递增数字,但它有时会重置,我必须检测它们(粗体行)

Table 1:
Shop #Sell DATE
EC1 56 1/10/2015
EC1 57 2/10/2015
**EC1 11 3/10/2015
EC1 12 4/10/2015**
AS2 20 1/10/2015
AS2 21 2/10/2015
AS2 22 3/10/2015
AS2 23 4/10/2015

为了解决这个问题,我想找到每个 SHOP 的最大数量并检查它是否是具有最大 DATE 的数字。您知道另一种更简单的方法吗?

我担心的是,由于我有一个大型数据库,按照我的想法进行操作可能会出现问题。

您知道我如何做我正在考虑的查询吗?或者您还有其他想法吗?

最佳答案

您想到的查询将为您提供所有在 Sell 数字中具有不连续性的 Shop 值。

如果您想获取违规记录,您可以使用以下查询:

SELECT Shop, Sell, DATE
FROM (
SELECT Shop, Sell, DATE,
LAG(Sell) OVER (PARTITION BY Shop ORDER BY DATE) AS prevSell
FROM Shops ) t
WHERE Sell < prevSell
ORDER BY DATE
LIMIT 1

上述查询将返回在每个 Shop 分区中找到的第一个 不连续点。

输出:

Shop    Sell    DATE
---------------------
EC1 11 2015-03-10

Demo here

编辑:

如果你不能使用窗口函数,而你只想要有不连续性的商店的 id,那么你可以使用以下查询:

SELECT s.Shop
FROM Shops AS s
INNER JOIN (
SELECT Shop, MAX(Sell) AS Sell, MAX(DATE) AS DATE
FROM Shops
GROUP BY Shop ) t
ON s.Shop = t.Shop AND s.DATE = t.DATE
WHERE t.Sell <> s.Sell

如果您为每个 Shop 设置唯一的 DATE 值,以上内容将有效。

关于sql - PostgreSQL : Check if the last number is the highest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30779324/

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