Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.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 如何使用Group by查找ID的最后记录并使用time进行检查?_Mysql - Fatal编程技术网

Mysql 如何使用Group by查找ID的最后记录并使用time进行检查?

Mysql 如何使用Group by查找ID的最后记录并使用time进行检查?,mysql,Mysql,这是我的主表,其中包含这种类型的记录 id | a_id | datetime ------------------------ 1 | 1 | 2016-01-07 15:42:14 2 | 1 | 2016-01-08 16:42:14 3 | 1 | 2016-01-09 17:42:14 4 | 2 | 2016-01-07 15:42:14 5 | 2 | 2016-01-08 16:42:14 6 | 2 | 2016-0

这是我的主表,其中包含这种类型的记录

id  | a_id | datetime
------------------------
1   |   1  | 2016-01-07 15:42:14
2   |   1  | 2016-01-08 16:42:14
3   |   1  | 2016-01-09 17:42:14
4   |   2  | 2016-01-07 15:42:14
5   |   2  | 2016-01-08 16:42:14
6   |   2  | 2016-01-09 17:42:14
7   |   2  | 2016-01-10 18:42:14
8   |   2  | 2016-01-11 19:42:14
我想要像这样的输出:

假设我的当前时间是17:50:00,那么我的以下结果将在我当前时间的半小时之前插入

id  | a_id | amount
------------------------
3   |   1  | 2016-01-09 17:42:14

如何获得这种输出?

类似的方法应该可以:

SELECT *
FROM mytable
WHERE `datetime` BETWEEN DATE_ADD(NOW(), INTERVAL -30 MINUTE) AND NOW()

编辑:

要获取最新的每组记录,然后查找这些记录是否在指定的时间间隔内,可以使用以下查询:

SELECT id, a_id, `datetime`
FROM (
  SELECT id, a_id, `datetime`,
         @rn := IF(@aid = a_id, @rn + 1,
                   IF(@aid := a_id, 1, 1)) AS rn
  FROM mytable
  CROSS JOIN (SELECT @rn := 0, @aid := 0) AS vars
  ORDER BY a_id, `datetime` DESC) AS t
WHERE t.rn = 1 AND 
      `datetime` BETWEEN DATE_ADD(NOW(), INTERVAL -30 MINUTE) AND NOW()
试试这个

SELECT *
FROM table_name
WHERE `date_time` 
BETWEEN DATE_ADD(NOW(), INTERVAL -30 MINUTE) AND NOW();
像这样的东西应该有用 如果max(a_id)不起作用,那么您还应该将datetime字段名放在那里,但首先使用sql将其转换为字符串

SELECT p1.* , p1.a_id as a_id
            FROM tbl_name p1
            INNER JOIN
            (
                SELECT max(a_id) as MaxVal
                FROM tbl_name
                GROUP BY a_id
            ) p2
              ON p1.id = p2.id
              AND p1.a_id = p2.MaxVal
            WHERE p1.datetime >= DATE_SUB(NOW(),INTERVAL 0.5 HOUR)

万一有人想得太多了

SELECT *
  FROM main 
 WHERE datetime < NOW() - INTERVAL 30 MINUTE 
 ORDER
   BY datetime DESC 
  LIMIT 1;
选择*
从主要
其中datetime
如何处理查询分组?@JayDoshi为什么需要一个
查询分组?@JayDoshi:-在这种情况下,您不需要使用分组依据。我需要分组依据,因为我需要一个u id的最后一条记录,然后我要检查它是否在当前时间和半小时之前。@JayDoshi您所说的u id的最后一条记录是什么意思?您的id是什么答案与Giorgos Betsos不同?我在同一时间添加了它,但这与Giorgos相同,我在得到它之前不知道。我只是想知道。大多数情况下都会发生:)@RahulTripathi好吧,但我从giogos回来晚了一分钟,所以每个人都可以责怪我你从别人的邮件中抄来的。我说,你可能会错过一开始的回答。如果你担心人们会责怪你,那么你可以删除它,因为它与Giorgos基本相同。同样根据OP的评论,这并没有解决他/她的问题:PWAH Bhailu。。古菊岩……是的。这就是我想要的。谢谢。非常欢迎兄弟。请告诉我你的联系电话。好的。我稍后会寄给你。:)让我们。