【发布时间】:2012-11-08 22:49:01
【问题描述】:
我正在尝试编写一个复杂的(至少,就我的知识水平而言)字符串,但我有一个地狱般的时间。
这就是问题所在。我有两张表,一张名为 t1,一张名为 c1。
表格定义如下:
table T1:
e_id, char(8),
e_date, datetime,
e_status, varchar(2)
table C1:
e_id, char(8),
e_date, datetime,
e_status, varchar(2)
每个表都包含一个标识符列表,这些标识符在两个表中可能存在也可能不存在(它们在每个表中可能是唯一的,也可能不是唯一的),以及相关的状态(在 T1 表中可以是“OK”或“R” , 可以是 C1 表中的 'OK' 或 'C'),以及与 e_id 的每次出现相关联的日期时间 e_date
我正在尝试编写一个查询:
- 检索 T1 表中在过去 24 小时内具有
e_date的所有 e_id 值。 - 检索过去 30 天内(e_date > 现在 - 30 天)在 T1 中过去 24 小时内(e_date 大于当前时间 - 24 小时)发生的所有 e_id,仍在表 T1 内(例如:如果在 t1 中找到 e_id 的 AAAAAAAAA 和 BBBBBBBB 且 e_date 在过去 24 小时内,则检索 e_id 的 AAAAAAA 和 BBBBBBBB 在同一个表中的所有出现但其 e_date 为过去 30 天内)
- 将在整个
T1 table中找到的每个特定e_id的e_status = 'OK'计数附加到行结果中 - 将在整个
C1 table中找到的每个特定e_id的e_Status = 'OK'计数附加到行结果中
我会尽力在这里写一些示例数据/结果。为清楚起见,我将忽略表数据类型。假设当前日期和时间是 2012-Nov-08 19:00:00
T1:
- e_id:'A',e_date:2012-Nov-08 10:00:00,e_status:'OK'
- e_id:'A',e_date:2012-Nov-08 10:00:00,e_status:'R'
- e_id:'A',e_date:2012-Oct-15 10:00:00,e_status:'R'
- e_id: 'B', e_date: 2012-Oct-15 10:00:00, e_status: 'OK'
- e_id:'A',e_date:2012-Oct-15 10:00:00,e_status:'OK'
- e_id:'A',e_date:2012-Oct-15 10:00:00,e_status:'R'
- e_id:'A',e_date:2012-Oct-15 10:00:00,e_status:'R'
- e_id:'A',e_date:2010-Jan-01 10:00:00,e_status:'R'
- e_id:'A',e_date:2010-Jan-01 10:00:00,e_status:'R'
C1:
- e_id:'A',e_date:2012-Oct-01 10:00:00,e_status:'C
- e_id: 'B', e_date: 2012-Oct-01 10:00:00, e_status: 'OK'
- e_id:'A',e_date:2012-Oct-01 10:00:00,e_status:'C
- e_id: 'B', e_date: 2012-Oct-01 10:00:00, e_status: 'OK'
- e_id:'A',e_date:2012-Oct-01 10:00:00,e_status:'OK' 李>
运行查询将产生:
e_id、e_date、e_status、r_count、c_count
1. e_id: 'A', e_date: 2012-Nov-08 10:00:00, e_status: 'OK', r_count: 6,c_count:2
2. e_id: 'A', e_date: 2012-Nov-08 10:00:00, e_status: 'R', r_count: 6,c_count:2
3. e_id: 'A', e_date: 2012-Oct-15 10:00:00, e_status: 'R', r_count: 6,c_count:2
4. e_id: 'A', e_date: 2012-Oct-15 10:00:00, e_status: 'OK', r_count: 6,c_count:2
5. e_id: 'A', e_date: 2012-Oct-15 10:00:00, e_status: 'R', r_count: 6,c_count:2
6. e_id: 'A', e_date: 2012-Oct-15 10:00:00, e_status: 'R', r_count: 6,c_count:2
非常抱歉,我不得不将 T1 第 3 行到第 7 行(结果的第 3 4 5 6 行)的日期更改为错误值。
未返回 T1 的第 4 行,因为在过去 24 小时内未找到 e_id: B
T1 第 8 行和第 9 行未返回,因为它们在过去 30 天之外
【问题讨论】:
-
你能提供表格的定义吗?另外,我不知道您所说的第二个要点是什么意思。您想要过去 30 天内的计数以及整个表的计数吗?如果不是,子弹没有意义。
-
好了,我已经修改了帖子。我希望这可以澄清,我感谢您的回复!
-
包含一些示例数据和所需输出的(相关)表列将有很大帮助
标签: mysql sql count sum self-join