0

SQLAlchemy 是否支持用户定义的变量?

https://dev.mysql.com/doc/refman/5.6/en/user-variables.html

问题:我试图获取两个连续行之间的时间差。我可以通过使用用户定义的变量编写原始 SQL 查询来做到这一点。在不编写原始 SQL 查询的情况下可以在 SQLAlchemy 中执行此操作吗?

我的桌子是这样的:

id user_id date
1. user_1  01-11-2021 00:00
2. user_1  01-11-2021 00:00
3. user_1  01-11-2021 00:01
4. user_2  01-11-2021 00:00

输出将类似于

id user_id time_diff
1. user_1  NULL
2. user_1  0
3. user_1  1
4. user_2  NULL
4

1 回答 1

0

执行所需任务且不使用 UDV 且适用于 MySQL 5.6 的 SQL 查询如下所示:

SELECT t1.*, TIMESTAMPDIFF(SECOND, t1.date, t2.date) time_diff
FROM table t1
LEFT JOIN table t2 ON t1.user_id = t2.user_id 
                  AND t1.date > t2.date
LEFT JOIN table t3 ON t1.user_id = t3.user_id 
                  AND t1.date > t3.date
                  AND t3.date > t2.date
WHERE t3.id IS NULL

逻辑:我们date从表副本中为用户选择 2 行(按值)t1并且t2(并且行t2具有较早的date值),并且副本t3检查这些行是否真的相邻(它们之间没有第三行)。

此查询不使用 UDV,可以转换为 SQLAlchemy 语法。

于 2021-11-02T04:58:40.997 回答