【问题标题】:How do I get timestamp when minimum or maximum value occur with SQL?当 SQL 出现最小值或最大值时,如何获取时间戳?
【发布时间】:2017-05-12 21:50:52
【问题描述】:

我有一个包含timestampvalue 列的数据库。日志记录是定期进行的。现在我想做每日汇总。已经这样做了:

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?如果一天中存在两次相同的最大值(或最小值),预期的结果是什么?
  • 添加示例数据和预期结果您的 Q 不是很清楚
  • @jarlh,我正在使用 SQLite。抱歉忘了提。
  • @O.Jones,我将从那里尝试示例。真的不知道如何为此提出问题。

标签: sql sqlite greatest-n-per-group


【解决方案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"

【讨论】:

    猜你喜欢
    • 2017-05-15
    • 2019-01-16
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-18
    • 2018-09-17
    • 1970-01-01
    相关资源
    最近更新 更多