当 SQL 出现最小值或最大值时,如何获取时间戳?
Posted
技术标签:
【中文标题】当 SQL 出现最小值或最大值时,如何获取时间戳?【英文标题】:How do I get timestamp when minimum or maximum value occur with SQL? 【发布时间】:2017-05-12 21:50:52 【问题描述】:我有一个包含timestamp
和value
列的数据库。日志记录是定期进行的。现在我想做每日汇总。已经这样做了:
SELECT
strftime("%Y-%m-%d", timestamp) AS "new_timestamp",
AVG(value) as value_avg,
MIN(value) as value_min,
MAX(value) as value_max,
COUNT(*) as num_samples,
/* ... something for when max and min value occurs */
FROM my_table
GROUP BY "new_timestamp"
问:我如何获得时间戳/时间当 MIN 或 MAX 在当天发生?
编辑:在我的具体情况下,如果有多个最小值或最大值,那么应该选择哪一个并不重要。我正在使用 SQLite。
【问题讨论】:
您使用的是哪个 dbms?如果一天中存在两次相同的最大值(或最小值),预期的结果是什么? SQL Select only rows with Max Value on a Column的可能重复 添加示例数据和预期结果您的 Q 不是很清楚 @jarlh,我正在使用 SQLite。抱歉忘了提。 @O.Jones,我将从那里尝试示例。真的不知道如何为此提出问题。 【参考方案1】:strftime()
的使用表明您正在使用 SQLite。如果是这样,那么相关子查询可能是进行计算的最简单方法。
我认为以下方法会起作用:
SELECT strftime('%Y-%m-%d', timestamp) AS "new_timestamp",
AVG(value) as value_avg,
MIN(value) as value_min,
MAX(value) as value_max,
COUNT(*) as num_samples,
(SELECT t2.timestamp
FROM my_table t2
WHERE strftime('%Y-%m-%d', t2.timestamp) = strftime('%Y-%m-%d', t.timestamp)
ORDER BY value desc
) as timestamp_max,
(SELECT t2.timestamp
FROM my_table t2
WHERE strftime('%Y-%m-%d', t2.timestamp) = strftime('%Y-%m-%d', t.timestamp)
ORDER BY value asc
) as timestamp_min
FROM my_table t
GROUP BY "new_timestamp"
【讨论】:
以上是关于当 SQL 出现最小值或最大值时,如何获取时间戳?的主要内容,如果未能解决你的问题,请参考以下文章