SQL - 如何通过比较2表中的日期来选择行

时间:2016-09-13 03:11:58

标签: sql oracle

我有2张这样的表:

表1:

ID |    COMPANY_NAME  | Rank |  FIRST_REGIST_DATE

  1           A           1          2017-09-01
  2           B           2          2017-09-05

表2:

 ID | COMPANY_NAME    | RANK  |   FIRST_REGIST_DATE
 1           A            3          2017-09-03
 2           C            4          2017-09-04

我需要使用FIRST_REGIST_DATE和RANK数据来选择公司 如果公司有2个首次注册日期,我们选择较早的日期和RANK 更高 (EX:以上公司A将有第一个日期:2017-09-01)

期望结果将是这样的: A公司 - 等级3 - 日期:2017-09-01

在这种情况下请让我选择

2 个答案:

答案 0 :(得分:1)

如果我正确理解了这个问题,那么您有两个包含公司详细信息和首次注册日期的数据表,并且您希望显示最早的第一个注册日期的行。以下查询将对您有所帮助。

SELECT company_name, MIN(fisrt_regist_date)
(
SELECT company_name, fisrt_regist_date
FROM table1
UNION ALL
SELECT company_name, fisrt_regist_date
FROM table2
) tab1
FROM tab1
GROUP BY company_name

上述查询将结合第一个表格和第二个表格的结果,然后向您显示公司的详细信息以及最早的注册日期。

答案 1 :(得分:1)

这在技术上回答了问题,但避免了房间里的大象(哪个ID优先?)。由于两个表都具有可能重叠的ID({B,C}具有ID为2),因此需要定义规则,以确定哪个ID优先于将其他表ID重命名为什么。

    Select COMPANY_NAME
           ,MIN(FIRST_REGIST_DATE) as REGIST_DATE
    from (
            SELECT *
            FROM #table1
            UNION ALL
            SELECT *
            FROM #table2 
    ) t3
    Group by COMPANY_NAME

在问题得到解答后,OP不会更改您的问题(通过添加RANK)。 对于您的更改:由@toha

提供
    Select COMPANY_NAME
          ,MIN(FIRST_REGIST_DATE) as REGIST_DATE 
          ,MAX(RANK ) as RANK 
    from ( SELECT * 
           FROM #table1 
             UNION ALL 
           SELECT * 
           FROM #table2 ) t3 
    Group by COMPANY_NAME