2014-02-12 2 views
0

У меня есть запрос профсоюза, чтобы получить запись даты Макс из двух таблицMysql Union Запрос запись результат emptys колонок

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 

это будет выглядеть в обеих вызовов и задачи и получить меня Футуристический вызов или задачи, но когда я запускаю это, и у меня есть футуристический вызов, а задача старше, я получаю NULL в столбцах id и assigned_user_id. Как получить всю информацию для записи даты MAX.

Когда я запускаю отдельные запросы, я получаю нуль для первого в то время как запись во втором.

ответ

1

Может быть, я неправильно понимает проблему, или я что-то не хватает - в этом случае, напишите мне комментарий, дайте мне знать, и Я могу удалить это сообщение вообще.

Но, как я понимаю, что вы написали, вы хотите:

  1. Получить одну запись в tasks с данным parent_id и parent_type и где date_due >= CURDATE() который имеет последнюю date_due значение.
  2. Получить такой же тип записи из таблицы calls (используя date_start вместо date_due).
  3. Из этих двух записей найдите одну запись с более поздним значением даты. Выберите id, дату (как max_date), и assigned_user_id из этой записи.

Ваш запрос (и подзапросы) может быть упорядочен по дате и получить только первую запись.

Я думаю, что-то вроде этого ...

SELECT id, 
     mx AS max_date, 
     `assigned_user_id` 
FROM (
    SELECT id, 
     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() 
    ORDER BY date_due DESC 
    LIMIT 1 

    UNION 

    SELECT id, 
     date_start as mx, 
     `assigned_user_id` 
    FROM calls 
    WHERE `deleted` = 0 
    AND `account_id` = 'aa6f0330-7a17-572f-94b5-4a5db1a1201f' 
    AND date_start >= CURDATE() 
    ORDER BY date_start DESC 
    LIMIT 1 
) 
ORDER BY max_date DESC 
LIMIT 1 
+0

Да с небольшим правлением для правильного использования фигурных скобок и псевдонима таблицы это правильное решение. – HardCode

0

Использование UNION ALL. Чтобы разрешить повторяющиеся значения, используйте ключевое слово ALL с UNION.

+0

Я использовал это, но что только дает мне max_date значение столбца, остальные два по-прежнему нулевой – HardCode

+0

Использование предложения GROUP BY, как вы используете агрегатную функцию. – yashasvee

+0

Тем не менее, это не работает, оно дает две строки, в то время как мне нужна одна строка с записью даты MAX. – HardCode

0

Выберите Max (max_date) от

(SELECT идентификатора, MAX (ая) AS max_date, assigned_user_id ОТ (SELECT идентификатора, MAX (date_due) AS тх, assigned_user_id ОТ задач WHERE deleted = 0 И parent_id = 'aa6f0330-7a17-572f-94b5-4a5db1a1201f' И parent_type = 'Accounts' И Дат e_due> = CURDATE() группа по ID UNION ВЫБРАТЬ идентификатор, MAX (DATE_START) КАК тх, assigned_user_id ИЗ вызовов ГДЕ deleted = 0 И account_id = 'aa6f0330-7a17-572f-94b5-4a5db1a1201f' И DATE_START > = CurDate()) S Group по идентификатору)

, как темп

+0

«id» и 'assign_user_id' требуются и не могут быть пропущены. Мне нужны эти значения, связанные с Record, MAX (mx) возвращается. – HardCode

Смежные вопросы