我有以下示例查询,
select o.ENTRY_ID, o.DESCRIPTION, o.ENTRY_DATE, l.COMPANY_ID
from TABLE1 o, TABLE2 l
where o.ENTRY_ID = l.ENTRY_ID
and COMPANY_ID in (10, 11, 12, 13)
将返回一组类似于以下内容的数据:
ENTRY_ID, DESCRIPTION, ENTRY_DATE, COMPANY_ID
1, Description 1, 2/12/2008, 10
2, Description 2, 2/12/2008, 10
3, Description 3, 2/10/2008, 10
4, Description 4, 2/11/2008, 10
4, Description 4, 2/11/2008, 11
4, Description 4, 2/11/2008, 12
4, Description 4, 2/11/2008, 13
如果条目与多家公司相关联,则此查询将为与其关联的每家公司返回相同的条目1次。
我希望查询与COMPANY_ID不同,因此如果条目与多家公司相关联,则只返回一次。
这是我要返回的结果集:
ENTRY_ID, DESCRIPTION, ENTRY_DATE, COMPANY_ID
1, Description 1, 2/12/2008, 10
2, Description 2, 2/12/2008, 10
3, Description 3, 2/10/2008, 10
4, Description 4, 2/11/2008, 10
但是,以下也是可以接受的,
ENTRY_ID, DESCRIPTION, ENTRY_DATE, COMPANY_ID
1, Description 1, 2/12/2008, 10
2, Description 2, 2/12/2008, 10
3, Description 3, 2/10/2008, 10
4, Description 4, 2/11/2008, 11
我想要不同的ENTRY_ID。在我现在得到的结果集中,我得到了四个ENTRY_ID条目,因为有四个不同的公司共享该条目。我希望在多个公司之间共享条目时只返回一个条目。
答案 0 :(得分:1)
SELECT ENTRY_ID, DESCRIPTION, ENTRY_DATE, COMPANY_ID
FROM (
SELECT o.ENTRY_ID, o.DESCRIPTION, o.ENTRY_DATE, l.COMPANY_ID,
ROW_NUMBER() OVER (PARTITION BY company_id ORDER BY entry_date DESC, entry_id DESC) AS rn
FROM TABLE1 o, TABLE2 l
WHERE o.ENTRY_ID = l.ENTRY_ID
AND COMPANY_ID in (10, 11, 12, 13)
)
WHERE rn = 1
这将返回最后一个ENTRY_DATE
或更高ENTRY_ID
的条目,其中有多个条目等于上一个ENTRY_DATE
答案 1 :(得分:0)
如果您愿意获得最大的COMPANY_ID
返回:
select o.ENTRY_ID, o.DESCRIPTION, o.ENTRY_DATE, MAX( l.COMPANY_ID ) AS COMPANY_ID
from TABLE1 o, TABLE2 l
where o.ENTRY_ID = l.ENTRY_ID
and COMPANY_ID in (10, 11, 12, 13)
group by o.ENTRY_ID, o.DESCRIPTION, o.ENTRY_DATE;
答案 2 :(得分:0)
我希望查询与COMPANY_ID不同,因此如果条目与多家公司相关联,则只返回一次。
问题不明确,您是否需要不同的条目或不同的公司。也许您也可以显示您想要的输出,以便我们更好地理解。
如果您想要不同的条目,并且要与其一起列出的company_id,则查询无关紧要:
select * from ( select o.ENTRY_ID, o.DESCRIPTION, o.ENTRY_DATE, l.COMPANY_ID, row_number() over (partition by o.ENTRY_ID, o.DESCRIPTION, o.ENTRY_DATE order by l.COMPANY_ID) rn from TABLE1 o, TABLE2 l where o.ENTRY_ID = l.ENTRY_ID and COMPANY_ID in (10, 11, 12, 13) ) where rn=1;