从表中选择数据,如果满足某些条件,则为记录选择最大日期

时间:2018-11-15 16:51:25

标签: sql oracle

我正在使用从Oracle DB中提取的tableau 10.5自定义Sql,并想查询图片中的五个表。我在这里看到过一些帖子,内容涉及如果两个值相同,则基于最大日期提取数据,但我要查找的内容有所不同。我要选择:

mnemonic,
problem_id,
create_date,
env_name

但是当助记符,problem_id和env_name都相同时,我只想提取具有最新create_date的记录。在我的实际场景中,我还想选择其他值,但为了简化起见,我将其遗漏了。 1

我将不胜感激任何帮助或指出正确的方向!

谢谢, 亚历克斯

1 个答案:

答案 0 :(得分:0)

如果我理解正确,那么您想选择这些列:

  • 表4中的MNEMONIC
  • 表3中的PROBLEM_ID
  • 当其他列相同时,
  • 从CREATE_DATE开始的最大CREATE_DATE
  • 表2中的ENV_NAME

只需使用LEFT JOINGROUP BY即可获得所需的内容:

SELECT TABLE4.MNEMONIC,
       TABLE3.PROBLEM_ID,
       MAX(TABLE1.CREATE_DATE) CREATE_DATE,
       TABLE2.ENV_NAME
  FROM TABLE1
  LEFT JOIN TABLE2
    ON (TABLE1.ENVIRONMENT_ID = TABLE2.ID)
  LEFT JOIN TABLE3
    ON (TABLE1.PROBLEM_ID = TABLE3.ID)
  LEFT JOIN TABLE4
    ON (TABLE1.MNEMONIC = TABLE4.ID)
 GROUP BY TABLE4.MNEMONIC,
          TABLE3.PROBLEM_ID,
          TABLE2.ENV_NAME;

P / s:您应该检查您的桌子设计。列的名称使查看者有些困惑。如果我理解不正确,那么您就可以加入并从多表中获取信息。