【问题标题】:Mysql: Selecting distinct value with 2 conditionsMysql:选择具有2个条件的不同值
【发布时间】:2014-05-27 13:20:56
【问题描述】:

我有一个名为 jobs 的表,其中包含以下字段:id、status。还有一个名为 jobs_history 的表,其中包含以下字段:id、jobid、status、added_time。

每次通过 php 编辑作业时,我都会将更新后的数据插入到 jobs_history 表中,其中包含 jobid、用户选择状态和 added_time。

一个工作可能被多次编辑,因此jobs_history 表中可能有很多行用于一个工作。并且状态字段可能包含不同的状态,例如,第一个状态是“审核中”,第二个可能是“进行中”,第三个可能是“已发送电子邮件”,第四个是“已完成”。

现在,我需要计算特定日期时间在该日期处于“进行中”状态的作业总数。以下是 jobs_history 表中的一些示例数据:

id | jobid | status       | added_time
--------------------------------------
1  | 10    | Under review | 2014-05-20 01:00:00
2  | 10    | In progress  | 2014-05-21 02:30:00
3  | 10    | E-mail sent  | 2014-05-23 10:00:00
4  | 10    | Completed    | 2014-05-23 04:00:00
5  | 11    | Under review | 2014-05-19 05:00:00
6  | 11    | In progress  | 2014-05-20 06:00:00
7  | 11    | E-mail sent  | 2014-05-20 07:00:00
8  | 11    | Completed    | 2014-05-22 08:00:00
9  | 12    | Under review | 2014-05-23 09:00:00
10 | 12    | In progress  | 2014-05-24 02:00:00
11 | 13    | Under review | 2014-05-20 10:00:00
12 | 13    | In progress  | 2014-05-20 12:00:00

我想计算 2014 年 5 月 21 日 06:00:00 状态为“进行中”的作业总数。查询应生成结果 2,即 jobid 10 和 13,因为它们是唯一在 2014 年 5 月 21 日 06:00:00 具有最后状态“进行中”的作业。

jobs_history 表中有大约 400,000 条数据,因此应该以尽可能快的方式编写查询。

谢谢,非常感谢您在这方面的帮助。

【问题讨论】:

  • 尝试 SELECT COUNT(*) AS Count FROM jobs_history WHERE status = 'In progress' AND added_time = '2014-05-21 06:00:00'
  • @Saqueib - 问题在于没有行匹配给定的added_time 条件。该表表示给定作业何时发生某些更改的日志,因此查询应该查找给定时间点的状态,即使当时没有条目。
  • 好吧,我需要的查询不会那么简单。正如我所说,查询应该产生 2 的结果,即 jobid 10 和 13。因为这些是在 2014-05-21 06:00:00 之前具有最后状态“进行中”的唯一作业。它也不会计算jobid 11,因为它的最后状态是“E-mail sent”,同样,jobid 12 也不会计算在内,因为它在2014-05-21 06:00:00 之后的状态是“In progress”。我能够编写所有常规查询,但真的很困惑如何编写这个。 @Saqueib

标签: php mysql sql


【解决方案1】:

如果您的日期格式不同,您可以使用 date_format 函数。检查此链接 http://sqlfiddle.com/#!2/4a6e8b/17

【讨论】:

  • 我仍在寻找某人的答案。有人可以帮我写这个mysql语句吗?
  • 嗨,请检查此链接以获取输出 sqlfiddle.com/#!2/4a6e8b/29,但查询会在您的命令提示符或界面上进行,如下所示 select status, count(status) from supportContacts where status = 'In progress' AND added_time = ' 2014-05-21 06:00:00' 按jobid分组;
猜你喜欢
  • 2015-02-28
  • 2017-11-17
  • 1970-01-01
  • 2012-03-04
  • 1970-01-01
  • 2020-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多