我有一個看起來像這樣的表:
user timestamp1 timestamp2
a 2020-10-07T15:36:01.323Z 2020-10-07T15:36:01.323Z
b 2020-10-07T15:36:01.323Z 2020-10-07T15:36:01.323Z
我可以像這樣計算最大或最小時間差:
min((JULIANDAY(timestamp2) - JULIANDAY(timestamp1)) * 24) AS min
max((JULIANDAY(timestamp2) - JULIANDAY(timestamp1)) * 24) AS max
但是如何制定一個 sql (sqlite) 查詢,以便我可以提取用戶名 表中的最小最大值?
最終結果可能如下所示:
type user time
max a 679..
min b 12..
我嘗試了這樣的事情來測驗:
"select user, ((JULIANDAY(timestamp2) - JULIANDAY(timestamp1)) * 24) AS val from mytable where ((JULIANDAY(timestamp2) - JULIANDAY(timestamp1)) * 24) == min((JULIANDAY(timestamp2) - JULIANDAY(timestamp1)) * 24)
我希望這將始終回傳用戶名和最小值,如下所示:
user val
a 12...
但我收到一個錯誤:
PandaSQLException: (sqlite3.OperationalError) misuse of aggregate function min()
uj5u.com熱心網友回復:
最簡單的解決方案是在 2 個單獨的查詢和結果中使用MIN()和MAX()聚合函式UNION ALL:
SELECT 'max' type, user, MAX((JULIANDAY(timestamp2) - JULIANDAY(timestamp1)) * 24) time FROM tablename
UNION ALL
SELECT 'min' type, user, MIN((JULIANDAY(timestamp2) - JULIANDAY(timestamp1)) * 24) time FROM tablename
此查詢使用 SQLite 的裸列功能。
我還建議使用strftime()而不是JULIANDAY(),因為它會提供更好的準確性:
SELECT 'max' type, user, MAX((strftime('%s', timestamp2) - strftime('%s', timestamp1)) / 3600.0) time FROM tablename
UNION ALL
SELECT 'min' type, user, MIN((strftime('%s', timestamp2) - strftime('%s', timestamp1)) / 3600.0) time FROM tablename
請參閱演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/457824.html
上一篇:修復SQL子查詢回傳多行
下一篇:SQL-獲取學生的所有選擇
