【问题标题】:Mysql Select statement based on hour, day, month, yearMysql 根据时、日、月、年选择语句
【发布时间】:2012-05-05 06:45:37
【问题描述】:

我有一个值如下所示的表

id         time_stamp                    value    
1          2013-01-01 00:00:15           10
2          2013-01-01 01:00:15            5
3          2013-01-02 00:00:15           15
4          2013-01-02 01:00:15           20
5          2013-02-01 00:00:15           18
6          2013-02-01 01:00:15           15
7          2013-02-02 00:00:15           5
8          2013-02-02 01:00:15           17
9          2014-01-01 00:00:15           8
10         2014-01-01 01:00:15            5
11         2014-01-02 00:00:15           15
12         2014-01-02 01:00:15           30
13         2014-02-01 00:00:15           18
14         2014-02-01 01:00:15           15
15         2014-02-02 00:00:15           5
16         2014-02-02 01:00:15           17

从这个表中,我想根据小时、日、月、年选择第一条记录值和最后一条记录值 例如我选择值基于

日期:

id  time_stamp              start_value               end_value
1   2013-01-01              10                         5
2   2013-01-02              15                         20
3   2013-02-01              18                         15

and so on

Month:
id  time_stamp              start_value               end_value
1   2013 jan                10                         20
2   2013 feb                18                         17
3   2014 jan                8                          30
4   2014 feb                18                         17

Year:
id  time_stamp              start_value               end_value
1   2013                    10                         17
2   2014                    8                          17

我该怎么做?

【问题讨论】:

  • select * from table WHERE time_stamp BETWEEN "2012-01-01" AND "2012-02-01" group by day(time_stamp)

标签: mysql


【解决方案1】:

使用mysql的如下聚合函数

SELECT 
    t.id, 
    DATE_FORMAT(t.time_stamp, "%Y-%m-%d") AS time_stamp, 
    (SELECT `value` FROM table_name WHERE time_stamp BETWEEN DATE_FORMAT(t.time_stamp, "%Y-%m-%d 00:00:00") AND DATE_FORMAT(t.time_stamp, "%Y-%m-%d 23:59:59") ORDER BY id ASC LIMIT 1) AS start_value,
    (SELECT `value` FROM table_name WHERE time_stamp BETWEEN DATE_FORMAT(t.time_stamp, "%Y-%m-%d 00:00:00") AND DATE_FORMAT(t.time_stamp, "%Y-%m-%d 23:59:59") ORDER BY id DESC LIMIT 1) AS end_value
FROM table_name t 
GROUP BY DATE_FORMAT(t.time_stamp, "%Y-%m-%d")

我在查询中提供了额外的参数,以帮助您保持查询的灵活性:)

【讨论】:

  • 所需的GROUP BY 子句在哪里?
  • 我不想要最小值和最大值。我只想要小时、日、月和年的第一个记录值和最后一个记录值
  • 使用 MIN 和 MAX 时不需要一个,这就像在 COUNT(*) 查询中询问 GROUP BY 在哪里...
  • 所以你不关心时间的先后顺序?你想要它基于 ID 吗?
  • 我只关心time_stamp asc,不关心id
猜你喜欢
  • 2012-02-24
  • 1970-01-01
  • 1970-01-01
  • 2013-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-21
相关资源
最近更新 更多