我需要根据相同属性和不同日期的内容和排除选择标准,我很难绕过如何做到这一点。这是我的标准列表。
首先将记录添加到数据库中,事务处理为222或223,活动代码为“A”。
记录的状态代码不是7
结果中不应包含2009年10月1日之后的以下交易(109,154,982,745)的最新活动代码(A,V,W,J)的任何记录,< / p>
有两个表涉及员工ID的加入。
表1:
|id | statcode
| 1 | 1
| 2 | 3
| 3 | 7
| 4 | 2
表2:
|id | date | act_code | trans
| 1 | 1/1/17 | Z | 109
| 1 | 3/4/12 | A | 222
| 1 | 2/14/09 | A | 154
| 2 | 1/1/17 | A | 223
| 2 | 6/6/13 | V | 109
| 3 | 11/23/14 | A | 222
| 4 | 12/13/16 | X | 154
| 4 | 11/23/14 | W | 223
我想回来的是:
| id | statcode| date | act_code | trans
| 1 | 1 | 3/4/12 | A | 222
不会选择ID 2,因为第一个trans不是正确的值之一。由于状态代码不正确,因此不会包含ID 3。不会选择ID 4,因为最新的act_code不是正确的值之一。任何人都知道如何解决这个问题?提前谢谢。
编辑:这是尝试的查询。它似乎归还了一切。
SELECT *
FROM firsttable a
join secondtable b on a.id=b.id
where exists (select id, min(date) from
secondtable
where c.TRANS in ('222','223') and (TRANS NOT IN ('109', '154', '982',
'745')
AND ACT_CODE NOT IN ('A', 'V', 'W', 'J') and date>= to_date('10/01/2009',
'MM/DD/YYYY'))
group by id)
and a.statcode <> '07'
;
答案 0 :(得分:0)
试试这个:
select Emp_id,statcode,date,act_code,trans
from table1 A join table2 b on (a.id=b.id)
WHERE b.trans in(222,223)
AND b.act_code='A'
AND a.stat_code<>7
AND (SELECT NVL(max(date),TO_DATE('01-JAN-1990','DD-MON-YYYY'))
FROM table2 c
WHERE c.id=b.id
AND c.act_code in ('A', 'V', 'W', 'J')
AND c.trans IN (109, 154, 982, 745)) < TO_DATE('01-OCT-1990','DD-MON-YYYY');
答案 1 :(得分:0)
*更新:现已测试并正常工作。
SELECT * FROM
tbl1 a INNER JOIN tbl2 b on a.id = b.id
where b.trans IN (222,223)
AND a.statcode <> 7
AND b.act_code = 'A'
AND NOT EXISTS(
SELECT 1 from tbl2 t2
WHERE t2.id = a.id
AND t2.act_code IN ('A','V','W','J')
AND t2.trans IN (109,154,982,745)
AND t2."date" > to_date('10/01/2009', 'MM/DD/YY'));
GO