来自其他表

时间:2015-10-11 15:20:46

标签: oracle

我有这张表:

问题

ID  |  Name      | date_time
1    question1      a date
2    question2      a date
3    question3      a date

ANSWER

ID  |  question_id | date_time
1      1             a date
2      1             a date
3      2             a date

COMMENT

ID  |  question_id | answer_id | date_time
1      NULL            1           a date
2      1               NULL        a date
3      2               NULL        a date

一个问题可以有多个答案和评论

答案属于单个问题

评论属于问题或答案!不是两个在同一时间。

我需要使用最近的“活动”来排序问题,这是问题,答案或反应的最新日期。

我已经添加了表格并设法按日期排序

SELECT q.*, a.last_date_answer, r.last_date_reaction
FROM QUESTION q LEFT JOIN
      (SELECT question_id, MAX(date_time) AS last_date_answer
       FROM ANSWER a
       GROUP BY question_id) a
ON q.id = a.question_id LEFT JOIN
      (SELECT question_id, MAX(date_time) AS last_date_reaction
       FROM REACTION r
       GROUP BY question_id) r
ON q.id = r.question_id
ORDER BY date_time DESC,
     CASE WHEN last_date_answer IS NULL THEN 1 ELSE 0 END,
     CASE WHEN last_date_reaction IS NULL THEN 1 ELSE 0 END;

这给出了以下虚拟输出:

date_time | - | last_date_answer | last_date_reaction
03-MAY-14   5   03-MAY-13          03-MAY-12
03-MAY-13   4   03-MAY-14          03-MAY-15
03-MAY-10   3   03-MAY-12          03-MAY-12

但我需要最高知名日期,该日期属于一个问题(问题中最高的问题,答案或反应日期)。无法弄清楚..我希望我有点清楚!

1 个答案:

答案 0 :(得分:1)

在select语句中使用 GREATEST 函数从这些连接表中获取最大日期,然后您可以按该列对它们进行排序。
您的查询应如下所示:

SELECT q.*, a.last_date_answer, r.last_date_reaction,
GREATEST(date_time, 
    NVL(a.last_date_answer,TO_DATE('01/01/0001','DD/MM/YYYY')),
    NVL(r.last_date_reaction,TO_DATE('01/01/0001','DD/MM/YYYY'))
) X
FROM QUESTION q LEFT JOIN
      (SELECT question_id, MAX(date_time) AS last_date_answer
       FROM ANSWER a
       GROUP BY question_id) a
ON q.id = a.question_id LEFT JOIN
      (SELECT question_id, MAX(date_time) AS last_date_reaction
       FROM REACTION r
       GROUP BY question_id) r
ON q.id = r.question_id
ORDER BY X DESC