我正在尝试编写一个复杂的(至少,就我的知识水平而言)字符串,但我有一个地狱般的时间。
这就是问题所在。我有两张表,一张名为 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 表中具有
e_date
过去 24 小时内的所有 e_id 值。 - 检索过去 30 天内(e_date > now - 30 天)内 T1 中过去 24 小时内( e_date 大于当前时间 - 24h )发生的所有 e_id ,仍在表 T1 内(例如:如果 e_id 的 AAAAAAA并且 BBBBBBBB 在 t1 中找到,并且 e_date 在过去 24 小时内,检索 e_id 的 AAAAAAAAA 和 BBBBBBBB 在同一个表中的所有出现,但 e_date 在过去 30 天内)
- 将在整个中找到的
e_status = 'OK'
每个特定的计数附加到行结果中e_id
T1 table
- 将在整个中找到的
e_Status = 'OK'
每个特定的计数附加到行结果中e_id
C1 table
我会尽我所能在这里写一些示例数据/结果。为清楚起见,我将忽略表数据类型。假设当前日期和时间是 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 行未返回,因为e_id: B
在过去 24 小时内未找到
T1 第 8 行和第 9 行未返回,因为它们在过去 30 天之外