【问题标题】:mysql count consiquence rowsmysql计算结果行
【发布时间】:2017-07-13 20:03:14
【问题描述】:

伙计们。我有一张像这样的桌子:

date_time_stamp         | value
________________________
01.01.2001 01:01:00     | test
02.01.2001 01:01:00     | foo
02.01.2001 01:01:00     | test
03.01.2001 01:01:00     | foo
04.01.2001 01:01:10     | test
04.01.2001 01:01:00     | test
05.01.2001 01:01:00     | test

我想计算有多少测试,但只计算最新的结果,

但只计算

04.01.2001 01:01:10 | test 

05.01.2001 01:01:00 | test

因为它们是最新的结果并且没有重复日期。如果有重复 - 您只需要计算最新的一个。有没有办法做到这一点?或者可能有另一种解决方案?还想添加那个值是一个集合。

【问题讨论】:

  • 所以您想获取所有日期的最新test 总数,即当天最新的每一天的单个test
  • 01.01.2001 01:01:00 似乎符合您对计数的定义。
  • 你的英文不好,“最新后果”是什么意思?
  • 我只需要最后一行包含测试的行,如果有两行具有相同的日期,我只需要计算最新的行。所以一个查询应该返回我“2行”或类似的东西。它也是一个 DATETIME 列。

标签: mysql sql select count


【解决方案1】:

下面将为您提供最新的 date_time_stamp,它每天都有 test 值。 MAX() 是一个聚合函数,适用于日期和时间。

SELECT MAX(date_time_stamp), value from TABLE_NAME
WHERE value = 'test'
GROUP BY date_time_stamp
ORDER BY date_time_stamp

输出的类型为 ...

MAX(date_time_stamp)    | value
_______________________________
01.01.2001 01:01:00     | test
02.01.2001 01:01:00     | test
04.01.2001 01:01:10     | test
05.01.2001 01:01:00     | test

如果您只想要test 的计数并且只选择每天的最新结果,那么下面应该会有所帮助...

SELECT COUNT(*) 
FROM (SELECT MAX(date_time_stamp) from TABLE_NAME
      WHERE value = 'test'
      GROUP BY date_time_stamp)

输出的类型为 ...

COUNT(*)
________
4

NOTE: 以上假设列 date_time_stamp 是 DATETIME 数据类型,否则您将不得不使用几个函数(REPLACE、STR_TO_DATE)来获取 DATETIME 格式。

Sample Data: 有处理它的 orderDates 和 employeeId。对于演示,我们将选择在同一天处理了超过 1 个订单的employeeId=4,因为没有时间,所以会有重复,MAX 将不受重复的影响,因为即使有重复,它也会始终选择最大值.

Output of 1st Query: 只获取当天最新的订单,按employeeId=4处理

Final Query:employeeId=4处理的订单总数,每天只选择最新的订单。

您可以在https://www.w3schools.com/sql/trysql.asp?filename=trysql_op_in尝试所有查询

【讨论】:

  • 按您正在聚合的同一列进行分组是没有意义的。应该是GROUP BY value
  • 据我了解,他只需要 test 作为值的行,他只需要最新的序列。 i want to count how many tests there is, but counting only the latest consequence。以上查询结果无论如何都会给出具有test 值的行总数。
  • MAX(col)GROUP BY col 一起使用仍然没有意义。组中的所有值都具有相同的值,因此最大值就是该值。
  • MAX(col)GROUP BY(col) 是为了获得当天的最新结果,而 WHERE 子句是只将带有 test 的行作为值。最后COUNT(*) 将给出test 的总数。
  • 也许你的意思是GROUP BY DATE(date_time_stmp),所以你得到了每天的最后一次。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-12
  • 2012-01-28
  • 2012-09-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多