【问题标题】:Need counts by day from two different dates in a table需要从表中的两个不同日期按天计数
【发布时间】:2015-03-28 03:23:49
【问题描述】:

我觉得这应该是一件容易的事,但我正在为此苦苦挣扎。

我有一个问题表,表中有以下内容:

  • 用户 ID
  • 创建日期
  • 解决日期
  • 问题编号

我两个通过用户 ID 总结了这一点,其中包含在某个日期创建的问题数量和在某个日期解决的问题数量。,

例如,

User ID   ///   Date     ///     Issues Received  ///  Issues Resolved
JonSmith1 ///  1/12/2015 ///            28        ///          34

问题源于我在计算已解决问题时不在乎何时收到问题。因此,已解决计算中的问题可能已在昨天、上周、去年等收到。

任何帮助将不胜感激。

谢谢, 体育

【问题讨论】:

  • 收到的问题比解决的问题要少
  • 对于给定的一天,它可以。例如,在 12 日,他们可能会收到总共 28 个问题,但他们在 12 日关闭的前几天的队列中仍有 X 个号码。

标签: mysql sql date join teradata


【解决方案1】:

分别查询这两个日期,然后将它们与UNION 结合起来:

SELECT UserID, Date, MAX(IssuesReceived) AS IssuesReceived, MAX(IssuesResolved) AS IssuesResolved
FROM (
    SELECT UserID, CreatedDate AS Date, COUNT(*) AS IssuesReceived, 0 AS IssuesResolved
    FROM Issues
    GROUP BY UserID, Date
    UNION
    SELECT User, ResolvedDate AS Date, 0 AS IssuesReceived, COUNT(*) AS IssuesResolved
    FROM Issues
    GROUP BY UserID, Date) AS u
GROUP BY UserID

【讨论】:

    【解决方案2】:

    试试这个。

    select userid,createddate as date,
          count(`created date`) as `Issues Received`,
          count(`Resolved Date`) as `Issues Resolved`
    from yourtable 
    where `Resolved Date` = '1/12/2015'
    Group by userid,createddate
    

    考虑到在创建新问题时解决日期将为空

    【讨论】:

      【解决方案3】:

      不确定这是否完全回答了您的问题,但您可能需要像这样进行联合:

      select user_id
          , action_date
          , count(case when action = 'CREATED' then 1 else null end)
          , count(case when action = 'RESOLVED' then 1 else null end)
      from (
           select user_id, created_date action_date, 'CREATED' action
           from table
           union
           select user_id, resolved_date, 'RESOLVED' action
           from table
           where resolved_date is not null
           ) x
      group by user_id, action_date
      

      这行得通吗?

      【讨论】:

        【解决方案4】:

        如果你确实在使用 Teradata,可以使用full outer join

        SELECT COALESCE(i.UserID, r.UserId) as UserId,
               COALESCE(i.Date, r.Date) as Date,
               COALESCE(IssuesReceived, 0) AS IssuesReceived, 
               COALESCE(IssuesResolved, 0) AS IssuesResolved
        FROM (SELECT UserID, CreatedDate AS Date, COUNT(*) AS IssuesReceived
              FROM Issues
              GROUP BY UserID, Date
             ) i FULL OUTER JOIN
             (SELECT User, ResolvedDate AS Date, COUNT(*) AS IssuesResolved
              FROM Issues
              GROUP BY UserID, Date
             ) r
             ON i.UserId = r.UserId and i.Date = r.Date;
        

        【讨论】:

          猜你喜欢
          • 2020-09-17
          • 2021-08-10
          • 1970-01-01
          • 2013-11-05
          • 1970-01-01
          • 2013-12-27
          • 1970-01-01
          • 2020-07-19
          • 1970-01-01
          相关资源
          最近更新 更多