我有大型数据库,一个字段应该是增量编号,但有时会重置,我必须检测它们(粗体行)
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的数字。你知道另一种更简单的方法吗?
我担心的是,由于我有一个大型数据库,所以按照我的方式行事可能会有问题。
您知道我如何处理我正在考虑的查询,或者您是否有其他想法?
答案 0 :(得分:1)
您想到的查询会为您提供Shop
个Sell
不连续的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
分区中找到的第一个不连续性。
<强>输出:强>
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
修改强>
如果你不能使用窗口函数而你只想要商店的id具有不连续性,那么你可以使用以下查询:
DATE
如果每个Shop
都有唯一的{{1}}值,则上述操作会有效。
答案 1 :(得分:0)
我认为以下是您想要的查询类型:
select s.*
from (select shop, max(sell) as maxsell,
first_value(sell) over (partition by shop order by date desc) as lastsell
from shops s
group by shop
) s
where maxsell <> lastsell;