我不是SQL的专家,所以我在这里问一些关于以下情况的帮助:
我有2张桌子; 1个表格“任务”(ID,TITLE,CREATEDAT)
和1个表格“活动”(ID,TASK_ID,TITLE,CREATEDAT)
其中CREATEDAT
是DATETIME
列。
我想在任务和活动中列出最后CREATEDAT
列的排序任务!我的意思是,拥有最近的任务(CREATEDAT
AND
,它具有最近的活动,例如任务和活动表的联合......)但我真的不知道如何处理?
感谢您的帮助!
答案 0 :(得分:2)
如果任务没有任何活动,则按最近活动或创建日期订购任务:
SELECT t.id, t.title
FROM task AS t
LEFT JOIN activity AS a ON t.id=a.task_id
GROUP BY t.id
ORDER BY COALESCE(MAX(a.createdat), t.createdat) DESC
答案 1 :(得分:2)
SELECT * FROM `task` T1
JOIN `activity` T2 ON T1.ID = T2.TASK_ID
ORDER BY T1.CREATEDAT, T2.CREATDAT DESC
答案 2 :(得分:1)
如果您想要显示所有任务,即使他们没有活动,我认为这正是您所寻找的。 p>
sekect task.id, task.title, activity.id, activity.title
from task
left join activity
order by task.createdat, activity.createdat desc
编辑:我将提供一个简短的解释,可以帮助您了解更多。
该语句基本上告诉数据库获取任务表和活动表中特定列“id”和“title”中的所有信息 - 这是sekect task.id, task.title, activity.id, activity.title
子句。
任何查询都将始终使用from
关键字搜索至少一个表。在这种情况下,我们使用from task
来搜索任务表。但是,对于此示例,您需要两个表的并集,需要使用join
关键字。使用join
可以让我们以多种方式搜索多个表格。在这种情况下我们使用left join
;如果您想对此进一步解释,请发表评论。
最后,我们只是按任务创建日期,然后是活动创建日期和指定的降序(最早的,最新的最后一个)来排序数据。
请注意,通常情况下,使用select *
不是最佳选择。它现在可能满足您的需求,但如果您要构建更多查询,则需要指定要显示的列,如我的示例所示。