0

我是编写 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 ,不幸的是我无法弄清楚如何获取它。有人可以指导我如何在上述查询或任何其他方法中完成该操作(或者我以完全错误的方式进行查询)。

4

1 回答 1

0

您确实需要获取最新的 b 值。一种方法是将条件from作为附加连接放在子句中。另一种方法是使用where带有相关子查询的子句:

where tableB.created_on = (select max(created_on)
                           from tableB b2
                           where b2.a_id = tableA.id
                          ) and
       . . . /* the rest of your conditions here */
于 2013-06-29T23:28:01.540 回答