0

我有以下示例查询,

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 的四个条目,因为四个不同的公司共享该条目。当多个公司共享条目时,我只希望返回一个条目。

4

3 回答 3

2
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

于 2009-02-12T21:27:50.413 回答
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;
于 2009-02-13T02:42:44.197 回答
0

我希望查询与 COMPANY_ID 不同,这样如果一个条目与多个公司相关联,它只会返回一次。

问题不清楚,你想要不同的条目还是不同的公司。也许您还可以显示您想要的输出,以便我们更好地理解。

如果您想要不同的条目并且 company_id 与它一起列出并不重要,这里是查询:

选择 * 从 (
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
从表 1 o,表 2 升
其中 o.ENTRY_ID = l.ENTRY_ID
和 COMPANY_ID 在 (10, 11, 12, 13)
)
其中 rn=1;
于 2009-02-13T08:58:29.050 回答