【问题标题】:Count Distinct multiple columns计算不同的多列
【发布时间】:2015-10-25 20:24:18
【问题描述】:

我有按月输入的记录...这是当前查询提取全年结果的样子。请注意,这是一个 Oracle 数据库。

我的查询:

SELECT UMEMBERID, FIRSTNAME, LASTNAME, BIRTHDATE, PUBLICATIONDT
  FROM MY_TABLE
 WHERE INDENTIFIER IN ('GROUP1') 
  AND PUBLICATIONDT >= DATE'2014-01-01'
  AND PUBLICATIONDT <= DATE'2014-12-31'

实际返回结果:

 UMEMBERID | FIRSTNAME | LASTNAME | BIRTHDATE | PUBLICATIONDT
--------------------------------------------------------------
 1         | John      | Smith    | 6/26/1983 | 11/20/2014
 2         | Jane      | Smith    | 2/2/1980  | 11/21/2014
 3         |  Roger    | Rabbit   | 8/3/1982  | 11/20/2014
 4         |  Bugs     | Bunny    | 6/20/1983 | 11/19/2014
 5         |  Daffy    | Duck     | 4/3/1982  | 11/17/2014
 6         |  Winnie   | Pooh     | 2/27/1989 | 12/15/2014
 7         |  Jane     | Doe      | 8/5/1959  | 12/11/2014
 5         |  Daffy    | Duck     | 4/3/1982  | 12/9/2014
 3         |  Roger    | Rabbit   | 8/3/1982  | 12/9/2014
 10        |  John     | Doe      | 8/9/1992  | 12/18/2014

我的预期结果如下:

 UMEMBERID | FIRSTNAME | LASTNAME | BIRTHDATE | PUBLICATIONDT
--------------------------------------------------------------
 1         | John      | Smith    | 6/26/1983 | 11/20/2014
 2         | Jane      | Smith    | 2/2/1980  | 11/21/2014
 3         | Roger     | Rabbit   | 8/3/1982  | 12/09/2014
 4         | Bugs      | Bunny    | 6/20/1983 | 11/19/2014
 5         | Daffy     | Duck     | 4/3/1982  | 12/09/2014
 6         | Winnie    | Pooh     | 2/27/1989 | 12/15/2014
 7         | Jane      | Doe      | 8/5/1959  | 12/11/2014
 10        | John      | Doe      | 8/9/1992  | 12/18/2014

如果您在实际返回的结果中注意到它为每只 Roger Rabbit(11/20/201412/09/2014)和 Daffy Duck(11/17/201412/09/2014)拾取了额外的记录。在我的预期结果中,我只想获取 12/09/2015 日期并显示 8 条记录。

【问题讨论】:

  • 那么您想要其他四列的每个组合的最新(最大)publicationdt?您是否尝试过使用 max 和 group-by ? (不过,如果其他列(除了键之外)具有重复值,则似乎您在此表中有非规范化数据)

标签: oracle duplicates distinct


【解决方案1】:

试试这样的:

SELECT UMEMBERID, FIRSTNAME, LASTNAME, BIRTHDATE, MAX(PUBLICATIONDT)
FROM MY_TABLE
WHERE INDENTIFIER IN ('GROUP1') 
AND PUBLICATIONDT >= DATE'2014-01-01'
AND PUBLICATIONDT <= DATE'2014-12-31'
GROUP BY UMEMBERID, FIRSTNAME, LASTNAME, BIRTHDATE;

【讨论】:

  • 这在 SQLDBX 中完美运行......现在我只需要将其转换为 Tableau
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-27
  • 2014-01-15
  • 1970-01-01
  • 1970-01-01
  • 2022-11-22
  • 2021-12-11
  • 2019-09-07
相关资源
最近更新 更多