Mysql 获取行数+插入的最后一行

Mysql 获取行数+插入的最后一行,mysql,sql,Mysql,Sql,我有一个sql: SELECT count(*) as nb, data_type, rawValue, createdAt FROM my_table WHERE data_type in('t','r', 'b') AND CreatedAt >= DATE_SUB(NOW(), interval 24 HOUR) AND CreatedAt <= NOW() AND device=27 AND id=462 group by data_type order by cr

我有一个sql:

SELECT count(*) as nb, data_type, rawValue, createdAt 
FROM my_table WHERE data_type in('t','r', 'b') 
AND  CreatedAt >= DATE_SUB(NOW(), interval 24 HOUR) 
AND CreatedAt <= NOW() AND device=27 AND id=462 
group by data_type order by createdAt DESC ;
对于数据_type=t,我有2018-08-01 10:10:23的行,但createdAt获取的是第一个值,而不是最后一个值。你能帮我吗?Thx提前

看起来db就是mysql, 当您使用聚合函数时,选择列应该位于GROUPBY子句中。我们知道现在返回的是今天的当前日期时间,因为您指定的间隔为24小时,所以请注意,选择时记录是否在此持续时间内,因为您的查询几乎可以,除了group by子句列之外,我将这些列放在group by子句中

正如您所期望的,每个数据类型有一行,所以我的更改如下

    select T.nd,T.data_type,A.rawValue,T.createdAt from
   (
    SELECT count(*) as nb, data_type, 
    max(createdAt) as createdAt
    FROM table WHERE data_type in('t','r', 'b') 
    AND  CreatedAt >= DATE_SUB(NOW(), interval 24 HOUR) 
    AND CreatedAt <= NOW() AND device=27 AND id=462 
    group by data_type 
    ) as T left join table A
   on T.createdAt=A.createdAt
  and T.data_type=A.data_type
    where A.data_type in ('t','r', 'b')
   AND  A.CreatedAt >= DATE_SUB(NOW(), interval 24 HOUR) 
    AND A.CreatedAt <= NOW() AND device=27 AND id=462 

如果共享表示例数据和预期输出,这将非常好

只标记实际使用的DBMS。使用两个子查询分别返回您提到的两行,并交叉连接它们together@Cato你能帮帮我吗?那看起来不像SQL Server。现在,DATE_SUB和interval不是SQL Server函数或关键字,或者至少不是在使用的上下文中。由于表是保留字,所以FROM表也会失败。如果您的表真的被称为table,那么在SQL Server中需要引用名称:[table]。@George,我在您的问题中添加了mysql标记,我猜这就是您正在使用的DBMS。如果我猜错了,请删除该标签并添加正确的标签。解决方案将取决于您使用的数据库。你确定你的问题中的结果是正确的吗?即,不遵守订单。我得到很多数据,而不是每个数据一行_type@George共享您的示例数据和预期输出,这样就很容易指导了you@George我编辑了答案,我想你需要这种类型的东西,按数据分组,按类型排序,按createdAt描述,可能无法在组中工作BY是在下单之前执行的,意思是你在一个分组的结果集上下单。也不是很有效:createdAt进展顺利,但不是相应的rawValue…例如:createdAt:2018-08-01 10:58:52,rawValue是200,但我得到28…你能看看@Zaynulabadinthin吗
    select T.nd,T.data_type,A.rawValue,T.createdAt from
   (
    SELECT count(*) as nb, data_type, 
    max(createdAt) as createdAt
    FROM table WHERE data_type in('t','r', 'b') 
    AND  CreatedAt >= DATE_SUB(NOW(), interval 24 HOUR) 
    AND CreatedAt <= NOW() AND device=27 AND id=462 
    group by data_type 
    ) as T left join table A
   on T.createdAt=A.createdAt
  and T.data_type=A.data_type
    where A.data_type in ('t','r', 'b')
   AND  A.CreatedAt >= DATE_SUB(NOW(), interval 24 HOUR) 
    AND A.CreatedAt <= NOW() AND device=27 AND id=462