MySQL 获取最大时间戳和关联键
MySQL Get max TimeStamp and associated key
我有 2 个表,Posts
和 Replies
。它们都包含插入数据时的 PostID
和 TimeStamp
。
在单个查询中,我想知道两个表中的最新条目,以及该条目的关联 PostID
。
我知道在 MSSQL 中我可以使用子查询来做到这一点,如下所示;
SELECT
PostID,
MAX(TimeStamp) as newTimeStamp
FROM (
SELECT
PostID as PostID
,TimeStamp as TimeStamp
FROM
Posts
UNION ALL
SELECT
PostID as PostID
,TimeStamp as TimeStamp
FROM
Replies
)
GROUP BY
PostID
ORDER BY
newTimeStamp DESC
我已经研究了 20 分钟了 - 我知道这是一个简单的解决方案。
澄清一下,PostID
是 Posts
的 PK,PostID
是 Replies
的 FK。我想知道,所有 PostID
上最近的 activity,按照 TimeStamp
的降序排列
这个怎么样?
SELECT
, Posts.PostID
, Posts.TimeStamp as LatestPost
, Replies.TimeStamp as LatestReply
, COALESCE(Replies.TimeStamp, Posts.TimeStamp) as LastActivity
FROM
Posts
LEFT OUTER JOIN
Replies
ON
Replies.PostID = Posts.PostID
WHERE
Posts.TimeStamp =
(SELECT MAX(TimeStamp)
From Posts sub
WHERE sub.PostID = Posts.PostID )
AND
(Replies.TimeStamp is NULL
OR Replies.TimeStamp =
(SELECT MAX(TimeStamp)
FROM Replies sub
WHERE sub.PostID = Posts.PostID
)
)
ORDER BY 4 DESC
我有 2 个表,Posts
和 Replies
。它们都包含插入数据时的 PostID
和 TimeStamp
。
在单个查询中,我想知道两个表中的最新条目,以及该条目的关联 PostID
。
我知道在 MSSQL 中我可以使用子查询来做到这一点,如下所示;
SELECT
PostID,
MAX(TimeStamp) as newTimeStamp
FROM (
SELECT
PostID as PostID
,TimeStamp as TimeStamp
FROM
Posts
UNION ALL
SELECT
PostID as PostID
,TimeStamp as TimeStamp
FROM
Replies
)
GROUP BY
PostID
ORDER BY
newTimeStamp DESC
我已经研究了 20 分钟了 - 我知道这是一个简单的解决方案。
澄清一下,PostID
是 Posts
的 PK,PostID
是 Replies
的 FK。我想知道,所有 PostID
上最近的 activity,按照 TimeStamp
这个怎么样?
SELECT
, Posts.PostID
, Posts.TimeStamp as LatestPost
, Replies.TimeStamp as LatestReply
, COALESCE(Replies.TimeStamp, Posts.TimeStamp) as LastActivity
FROM
Posts
LEFT OUTER JOIN
Replies
ON
Replies.PostID = Posts.PostID
WHERE
Posts.TimeStamp =
(SELECT MAX(TimeStamp)
From Posts sub
WHERE sub.PostID = Posts.PostID )
AND
(Replies.TimeStamp is NULL
OR Replies.TimeStamp =
(SELECT MAX(TimeStamp)
FROM Replies sub
WHERE sub.PostID = Posts.PostID
)
)
ORDER BY 4 DESC