gpt4 book ai didi

SQL - 如果在过去一小时内插入了新的唯一记录,则发出警报

转载 作者:行者123 更新时间:2023-12-03 01:26:43 27 4
gpt4 key购买 nike

我正在尝试以 SQL 查询的形式为以下问题找到一个优雅的解决方案。

新记录将插入到日志表中。我需要检测以前未见过的任何新记录(在过去一小时内插入)并生成警报(例如,这些记录的数量 > 0)

ID, Url, DOB
1, site1.com/page1, "5/06/2012 20:01"
2, site2.com/page2, "5/06/2012 21:20"
3, site1.com/page1, "6/06/2012 10:05"

如果“现在”是 6/06/2012 10:40 - 我看到插入了 1 条新记录 (id=3),但我不想生成警报,因为我们之前已经看到过此 URL (id=3) =1)。

如果我们有4、site3.com/pageX,“2012年6月6日10:08”然后我想生成一个警报(返回计数=1),因为该行是在最后一小时插入的,我们之前没有看到过。

实现它的最佳方法是什么?最好没有嵌套查询

最佳答案

我想这就是你所追求的。这将检索过去一小时内的新条目(其中新表示过去一小时内尚未访问过相同的 URL)

SELECT  *
FROM Log
WHERE DOB > DATEADD(HOUR, -1, CURRENT_TIMESTAMP)
AND NOT EXISTS
( SELECT 1
FROM Log T1
WHERE T1.URL = Log.URL
AND T1.DOB < DATEADD(HOUR, -1, CURRENT_TIMESTAMP)
)

SQL Fiddle 上的工作示例

编辑

刚刚看到一条评论,你只需要一个计数:

SELECT  COUNT(*)
FROM Log
WHERE DOB > DATEADD(HOUR, -1, CURRENT_TIMESTAMP)
AND NOT EXISTS
( SELECT 1
FROM Log T1
WHERE T1.URL = Log.URL
AND T1.DOB < DATEADD(HOUR, -1, CURRENT_TIMESTAMP)
)

编辑2

我不确定为什么要求只能是单个选择,但是,我能得到的最接近单个选择的是:

SELECT  COUNT(*)
FROM ( SELECT *, MIN(DOB) OVER(PARTITION BY URL) [FirstViewed]
FROM Log
) Log
WHERE FirstViewed >= DATEADD(HOUR, -1, CURRENT_TIMESTAMP)

如果同一页面在过去一小时内被访问过两次,则仍会返回 2。

http://sqlfiddle.com/#!3/5a8bc/1

关于SQL - 如果在过去一小时内插入了新的唯一记录,则发出警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10931976/

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