【发布时间】:2017-12-08 15:55:36
【问题描述】:
我需要根据相同属性和不同日期的包含和排除来选择标准,我很难思考如何做到这一点。这是我的标准列表。
该记录首次添加到数据库中,事务为 222 或 223,活动代码为“A”。
记录没有状态码7
-
结果中不应包含 2009 年 10 月 1 日之后以下交易(109、154、982、745)的最新活动代码(A、V、W、J)的任何记录,
员工 ID 上的联接涉及 2 个表。
表 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 不是正确的值之一。任何人都知道如何解决这个问题?提前致谢。
edit:这是尝试的查询。它似乎返回了一切。
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'
;
【问题讨论】:
-
您只是说第二个查询中存在记录的位置,如果它返回单行,它将返回第一部分的所有内容。您需要为 secondtable.id = a.id 添加一个子句,以强制它通过第一个返回的 id 过滤第二部分
-
如果您的问题得到了回答,您应该将其标记为这样,以帮助其他人找到解决方案。