我有这张表:
问题
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
但我需要最高知名日期,该日期属于一个问题(问题中最高的问题,答案或反应日期)。无法弄清楚..我希望我有点清楚!
答案 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