我是编写 SQL 的新手,我手头有一个遗留系统可以处理三个表,如下所示:
Table A
=========
id | tracker_id | created_on | status | p_id
1 | 1 | ... | (Table C latest new_val ) 4 | 121
Table B
=========
id | a_id | created_on |
1 | 1 | 2013-12-12 15:15:16
2 | 1 | 2013-12-15 15:20:16
3 | 1 | 2013-12-15 15:25:16
4 | 1 | 2013-12-15 15:30:16
5 | 1 | 2013-12-15 16:20:16
6 | 1 | 2013-12-16 17:20:16
7 | 1 | 2013-12-25 16:25:16
Table C
=========
id | b_id | type | old_val | new_val
1 | 1 | type1| 1 | 2
2 | 2 | type1| 2 | 3
3 | 3 | type1| 3 | 4
4 | 4 | type1| 4 | 5
5 | 5 | type1| 5 | 3
6 | 6 | type1| 3 | 5
7 | 7 | type1| 5 | 3
我想获取任何特定日期之间的表 A id 的计数,例如 2013-12-13 和 2013-12-17 之间的表 C new_val 的特定最新值,因此在上述情况下,如果我在“2013 年”之间查询-12-13 和 2013-12-17" 与 p_id 为 121 和表 C new_val 为 5 我应该得到 1 。此外,如果我在“2013-12-13 和 2013-12-17”之间查询表 C new_val 为 3 我应该得到 0 。
我写了一个表格查询
Select count(tableA.id) from tableA tableA
inner join tableB tableB on tableA.id=tableB.a_id
inner join tableC tableCdetails on tableB.id=tableCdetails.b_id
where tableCdetails.type = 'type1' and tableCdetails.new_val='5'
and tableB.created_on between '2013-12-13' AND '2013-12-17'
and tableA.p_id = 121
我已经使用试错法尝试了一些组合,并且我在某些情况下通过上述查询获得了某些值,但是这与系统中的某些其他值不匹配。我想我错过了这样一个事实,即我需要在时间范围内获取最新的 tableB id 并匹配与该 tableB id 对应的 tableC 条目的 new_val ,不幸的是我无法弄清楚如何获取它。有人可以指导我如何在上述查询或任何其他方法中完成该操作(或者我以完全错误的方式进行查询)。