Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql基于时、日、月、年的Select语句_Mysql - Fatal编程技术网

Mysql基于时、日、月、年的Select语句

Mysql基于时、日、月、年的Select语句,mysql,Mysql,我有一张有价值的桌子,看起来像这样 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

我有一张有价值的桌子,看起来像这样

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
从这个表中,我想根据小时、天、月、年选择第一个记录值和最后一个记录值 例如,我选择基于的值

日期:


我如何做到这一点?

使用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")

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

所需的
groupby
子句在哪里?我不需要最小值和最大值。我只需要第一个记录值&小时、天、月和年的最后一个记录值。当您使用最小值和最大值时,不需要一个记录值,这就像在计数(*)查询中询问GROUP BY在哪里……所以您不关心时间的时间顺序?您想要基于ID的时间戳吗?我只关心时间戳asc,而不关心idselect*从表中选择,其中时间戳按天在“2012-01-01”和“2012-02-01”组之间(时间戳)
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")