【发布时间】:2021-05-25 18:28:12
【问题描述】:
我正在处理一张桌子,我必须在其中找到会话之间的平均时间差。
我遇到了 2 个帖子,他们提供了以下解决方案。 Get average time between times in SQL
SELECT AVG(period)
FROM (
SELECT TIME_TO_SEC(TIMEDIFF(@date_posted, date_posted)) AS period,
@date_posted := date_posted
FROM (
SELECT @date_posted := NULL
) vars,
messages
ORDER BY
date_posted
) q
和
How to calculate the smallest period of time between consecutive events?
SELECT (temperature - @r) AS diff,
@r := temperature
FROM (
SELECT @r := 0
) vars,
temperatures
ORDER BY
time
我发现很难理解查询结构来修改它以适应我的目的。有人可以把它分解成更简单的术语。通过基本的谷歌搜索,我认为 @var 是一些变量,您可以在其中插入值。我不知道 := 运算符。
感谢您的宝贵时间。
【问题讨论】:
-
你使用的是 MySQL 还是 Postgresql?
-
这感觉就像
mysql与那些@变量,但你有postgresql标记它不使用这样的变量。 -
该链接没有解释 := 或 @var 实际在做什么。
-
@是 user-defined variable 前缀。:=是 assigning operator (而不是=可以分配或比较,取决于上下文)。 我不知道总是先尝试一个想法来阅读文档。 -
这两个例子都是错误的,因为它们在不同的表达式中分配和使用变量。也就是说,两者都使用窗口函数要容易得多。我建议你专注于学习窗口函数,而不是过时、不推荐和定制的变量方法。