Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.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获取具有时间间隔的行_Mysql_Sql_Time_Intervals - Fatal编程技术网

MySQL获取具有时间间隔的行

MySQL获取具有时间间隔的行,mysql,sql,time,intervals,Mysql,Sql,Time,Intervals,我有一个包含一些列的表,其中一列有创建数据的时间戳。 假设下面是一张表 id | val | time ---+-----+-------------------- 1 | 1 |2016-07-02 03:31:31 1 | 2 |2016-07-02 03:32:32 1 | 2 |2016-07-02 03:33:33 1 | 3 |2016-07-02 03:33:34 1 | 4 |2016-07-02 03:41:31 1 | 5 |2016-07

我有一个包含一些列的表,其中一列有创建数据的时间戳。 假设下面是一张表

id | val | time
---+-----+--------------------
1  |  1  |2016-07-02 03:31:31
1  |  2  |2016-07-02 03:32:32
1  |  2  |2016-07-02 03:33:33
1  |  3  |2016-07-02 03:33:34
1  |  4  |2016-07-02 03:41:31
1  |  5  |2016-07-02 03:41:32
1  |  5  |2016-07-02 03:46:33
1  |  6  |2016-07-02 03:47:34
平均每一秒钟,就会有一个条目进入该表。这是太多的数据显示在用户界面上。我希望每10分钟整合一次数据

i、 e.结果应该只有两排。列
val
的值可以是任何值,如果
val
是它们中的任何一个或它们的平均值就可以了

期望输出(三种输出中的任意一种)

有没有办法让这10分钟成为动态参数?(静态启动正常)

编辑
这里包括我的评论:我正在使用hibernate,所以首选hibernate。但如果这不起作用,那么我们只能选择MySQL native。没有最后X行的条件,我希望所有行都是特定id和特定日期之间的行。只是我希望在10分钟的间隔内减少行数。

下面的查询将给出您期望的结果

MySQL语法

SQL Server语法


编辑:更新了查询的MySQL语法。

以下查询将给出预期结果

MySQL语法

SQL Server语法


编辑:更新了查询的MySQL语法。

MySQL原始还是休眠?你有一个冬眠的问题要去别的地方。另外,要清楚从查询中吐出的内容,例如
now()
向后或其他内容中的最后X行(间隔10分钟)。有人必须对这个东西进行编码,并且希望在我第一次使用hibernate时就把它做好,所以首选hibernate。但如果这不起作用,那么我们只能选择MySQL native。没有最后X行的条件,我希望所有行都是特定id和特定日期之间的行。我只是想减少间隔10分钟的行数。希望这次我说得清楚。好的,那么你想通过两次
datetimes
,然后间隔10分钟。我可以在非冬眠状态下这样做,但现在是凌晨2点,我没有精力了。mysql raw,还是hibernate?你有一个冬眠的问题要去别的地方。另外,要清楚从查询中吐出的内容,例如
now()
向后或其他内容中的最后X行(间隔10分钟)。有人必须对这个东西进行编码,并且希望在我第一次使用hibernate时就把它做好,所以首选hibernate。但如果这不起作用,那么我们只能选择MySQL native。没有最后X行的条件,我希望所有行都是特定id和特定日期之间的行。我只是想减少间隔10分钟的行数。希望这次我说得清楚。好的,那么你想通过两次
datetimes
,然后间隔10分钟。我可以在非冬眠状态下这样做,但现在是凌晨2点,我没有精力了。
id | val | time
---+-----+--------------------
1  |  1  |2016-07-02 03:3X:XX
1  |  4  |2016-07-02 03:4X:XX
id | val | time
---+-----+--------------------
1  |  2  |2016-07-02 03:3X:XX
1  |  5  |2016-07-02 03:4X:XX
id | val | time
---+-----+--------------------
1  |  3  |2016-07-02 03:3X:XX
1  |  6  |2016-07-02 03:4X:XX
DROP TABLE TEMP_TEST;
CREATE TABLE TEMP_TEST(ID INT,VAL INT,TIME DATETIME);

INSERT INTO TEMP_TEST VALUES
(1,1,'2016-07-02 03:31:31'),
(1,2,'2016-07-02 03:32:32'),
(1,2,'2016-07-02 03:33:33'),
(1,3,'2016-07-02 03:33:34'),
(1,4,'2016-07-02 03:41:31'),
(1,5,'2016-07-02 03:41:32'),
(1,5,'2016-07-02 03:46:33'),
(1,6,'2016-07-02 03:47:34'),
(1,6,'2016-07-02 03:51:34');


SELECT @INTERVAL := 10, @PREVIOUS_TIME := (select time from TEMP_TEST LIMIT  1);
SELECT TIME,
@INTERVAL ,
@PREVIOUS_TIME,
TIMESTAMPDIFF(MINUTE,@PREVIOUS_TIME,TIME) AS DIFF_INTERVAL,
  (CASE
    WHEN ((TIMESTAMPDIFF(MINUTE,@PREVIOUS_TIME,TEMP_TEST.TIME))%@INTERVAL)=0 THEN "TRUE"
    ELSE "FALSE"
  END) AS VALID
from TEMP_TEST;
DROP TABLE #TEMP_TEST;
CREATE TABLE #TEMP_TEST(ID INT,VAL INT,TIME DATETIME)

INSERT INTO #TEMP_TEST VALUES
(1,1,'2016-07-02 03:31:31'),
(1,2,'2016-07-02 03:32:32'),
(1,2,'2016-07-02 03:33:33'),
(1,3,'2016-07-02 03:33:34'),
(1,4,'2016-07-02 03:41:31'),
(1,5,'2016-07-02 03:41:32'),
(1,5,'2016-07-02 03:46:33'),
(1,6,'2016-07-02 03:47:34'),
(1,6,'2016-07-02 03:51:34');


DECLARE @INTERVAL INT=10;
DECLARE @PREVIOUS_TIME DATETIME;
SELECT TOP 1 @PREVIOUS_TIME=TIME FROM #TEMP_TEST ORDER BY TIME

SELECT TIME,
@INTERVAL AS INTERVAL ,
@PREVIOUS_TIME AS PREVIOUS_TIME, 
DATEDIFF(MINUTE,@PREVIOUS_TIME,TIME) AS DIFF_INTERVAL,
CASE WHEN (((DATEDIFF(MINUTE,@PREVIOUS_TIME,TIME))%@INTERVAL)=0) THEN 'TRUE' ELSE 'FALSE' END AS TRUE
FROM #TEMP_TEST
WHERE (CASE WHEN (((DATEDIFF(MINUTE,@PREVIOUS_TIME,TIME))%@INTERVAL)=0) THEN 'TRUE' ELSE 'FALSE' END)='TRUE'
ORDER BY TIME