Mysql Union Query Record结果清空列

时间:2014-02-12 11:11:50

标签: mysql

我有一个联合查询来从两个表中获取最大日期记录

SELECT
  id,
  MAX(mx)            AS max_date,
  `assigned_user_id`
FROM (SELECT
        id,
        MAX(date_due)       AS mx,
        `assigned_user_id`
      FROM tasks
      WHERE `deleted` = 0
          AND `parent_id` = 'aa6f0330-7a17-572f-94b5-4a5db1a1201f'
          AND `parent_type` = 'Accounts'
          AND date_due >= CURDATE() UNION SELECT
                                           id,
                                           MAX(date_start)      AS mx,
                                           `assigned_user_id`
                                         FROM calls
                                         WHERE `deleted` = 0
                                             AND `account_id` = 'aa6f0330-7a17-572f-94b5-4a5db1a1201f'
                                             AND date_start >= CURDATE()) s

这会查看调用和任务并获取未来调用或任务,但是当我运行此操作并且我有一个未来调用且任务较旧时,我在id和{{1}中获得NULL }} 列。我如何获取MAX日期记录的整个信息。

当我运行单个查询时,第一个获取为空,而第二个中为记录。

3 个答案:

答案 0 :(得分:1)

也许我误解了这个问题,或者我错过了一些东西 - 在这种情况下,请给我发表评论让我知道,我可以完全删除这篇文章。

但是,我理解你所写的内容的方式,你想:

  1. 使用给定的tasksparent_id以及具有最新parent_type
  2. date_due >= CURDATE()表中获取相同类型的记录(使用date_due代替calls)。
  3. 在这两条记录中,找到具有较晚日期值的一条记录。从该记录中选择date_start,日期(date_due)和id
  4. 您的查询(和子查询)可以按降序排序,只获取第一条记录。

    我在想这样的事情......

    max_date

答案 1 :(得分:0)

使用UNION ALL。要允许重复值,请将ALL关键字与UNION一起使用。

答案 2 :(得分:0)

中选择Max(max_date)

(SELECT   ID,   MAX(mx)AS max_date,   assigned_user_id 从 (选择         ID,         MAX(date_due)AS mx,         assigned_user_id       从任务       WHERE deleted = 0           AND parent_id ='aa6f0330-7a17-572f-94b5-4a5db1a1201f'           和parent_type ='帐户'           AND date_due> = CURDATE()按ID UNION SELECT分组                                            ID,                                            MAX(date_start)AS mx,                                            assigned_user_id                                          来自电话                                          WHERE deleted = 0                                              AND account_id ='aa6f0330-7a17-572f-94b5-4a5db1a1201f'                                              AND date_start> = CURDATE())s group by id)

as temp