【问题标题】:Min(date) returning conflicting Results - TableauMin(date) 返回冲突的结果 - Tableau
【发布时间】:2015-09-25 14:23:25
【问题描述】:

长期观察者,第一次发帖:

我目前正在使用 Tableau 中的 SQL 功能。我希望查询返回用户 ID (SQLCEC)、出席日期 (SQL 日期) 和用户第一次出席 (FirstAttendanceDate)。

SELECT [Attendees$].[CEC] AS [SQLCEC]

, [Attendees$].[Date] AS [SQL Date]
, [Data2].[FirstAttendanceDate]       

FROM [Attendees$]
INNER JOIN(SELECT [Attendees$].[Name]
,                  MIN([Attendees$].[Date])As [FirstAttendanceDate]
                   From [Attendees$]
                   Group By [Attendees$].[Name])AS [Data2]
ON [Attendees$].[Name] = [Data2].[Name]
WHERE [Attendees$].[CEC] IN ("jakyles","ajannett")
ORDER BY [Attendees$].[CEC],[Attendees$].[Date]

代码返回如下结果:

SQLCEC    SQL Date          FirstAttendanceDate
ajannett  12/9/2014 0:00    12/9/2014 0:00
ajannett  4/14/2015 0:00    12/9/2014 0:00
ajannett  6/23/2015 0:00    12/9/2014 0:00
jakyles   12/9/2014 0:00    12/9/2014 0:00
jakyles   5/12/2015 0:00    12/9/2014 0:00
jakyles   6/23/2015 0:00    6/23/2015 0:00

我试图弄清楚为什么我的 FirstAttendanceDate 列为用户 jackyles(这不是我想要的)返回“6/23/2015”,而用户 ajannett 正在返回所需的结果。我是一个相当新的 SQL 用户。我从根本上错过了什么吗?感谢您的帮助!

【问题讨论】:

  • 如果只单独运行内部 SQL,是否只看到两条记录?还是你看到三个?
  • 能否提供所有表的测试数据?

标签: sql date min tableau-api


【解决方案1】:

我的猜测,没有看到您的原始表格,与 Name 列的内容有关,而不是 CEC 列。我怀疑如果您将 Name 列添加到结果集中,那么最后两行该列的内容对于 name 列将是不同的,即使它们对于 SQLCEC 列是相同的。

我唯一的建议是将查询中的引用从名称更改为 CEC:

SELECT [Attendees$].[CEC] AS [SQLCEC]
, [Attendees$].[Date] AS [SQL Date]
, [Data2].[FirstAttendanceDate]       

FROM [Attendees$]
INNER JOIN(SELECT [Attendees$].[CEC]
,                  MIN([Attendees$].[Date])As [FirstAttendanceDate]
                   From [Attendees$]
                   Group By [Attendees$].[CEC])AS [Data2]
ON [Attendees$].[CEC] = [Data2].[CEC]
WHERE [Attendees$].[CEC] IN ("jakyles","ajannett")
ORDER BY [Attendees$].[CEC],[Attendees$].[Date]

【讨论】:

  • 感谢 Bryan 的洞察力。你是绝对正确的。经过进一步调查,似乎尽管一个人拥有唯一的用户 ID,但他们的名字拼写不同。
【解决方案2】:

我想通了。

SELECT [Attendees$].[CEC] AS [SQLCEC]

, [Attendees$].[Date] AS [SQL Date]
, [Data2].[FirstAttendanceDate]       

FROM [Attendees$]
INNER JOIN(SELECT [Attendees$].[CEC]
,                  MIN([Attendees$].[Date])As [FirstAttendanceDate]
                   From [Attendees$]
                   Group By [Attendees$].[CEC])AS [Data2]
ON [Attendees$].[CEC] = [Data2].[CEC]
WHERE [Attendees$].[CEC] IN ("jakyles","ajannett")
ORDER BY [Attendees$].[CEC],[Attendees$].[Date]

我加入的是名字而不是 CEC。

【讨论】:

  • 仅供参考,您可以在 Tableau(从版本 9 开始)中获得相同的效果,方法是使用详细级别计算而不是自定义 SQL。
  • @AlexBlakemore,抱歉回复晚了。确实是的!真希望我早点读到你的帖子。这会节省很多时间。
猜你喜欢
  • 1970-01-01
  • 2016-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-04
  • 2016-09-03
  • 1970-01-01
  • 2018-01-06
相关资源
最近更新 更多