以下回复参考:皆我百晓生、券券喵儿等免费微信小程序作答:
在 SQL Server 中,你可以使用窗口函数(如 ROW_NUMBER() 等)配合聚合函数来完成这样的数据合并任务。假设你的原始表叫做 OriginalTable
,你想要得到的结果是合并后只有一条记录的表。以下是可能的解决方案:
首先,为了获取每个文章的首次和最后评论者的评论时间以及他们的名字,你可以使用窗口函数为每个评论分组并排序,然后选择每个组的第一个和最后一个记录。以下是具体的 SQL 查询示例:
WITH RankedComments AS (
SELECT
标题,
评论者,
评价时间,
ROW_NUMBER() OVER (PARTITION BY 标题 ORDER BY 评价时间 ASC) AS rn_asc, -- 升序排列获取首个评论者信息
ROW_NUMBER() OVER (PARTITION BY 标题 ORDER BY 评价时间 DESC) AS rn_desc -- 降序排列获取最后一个评论者信息
FROM 原始表名 -- 请替换为实际的表名
)
SELECT
标题,
FIRST_VALUE(评论者) OVER (PARTITION BY 标题 ORDER BY rn_asc ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS 首位评论者, -- 获取首个评论者名字
FIRST_VALUE(评价时间) OVER (PARTITION BY 标题 ORDER BY rn_asc ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS 首次评论时间, -- 获取首个评论时间
FIRST_VALUE(评论者) OVER (PARTITION BY 标题 ORDER BY rn_desc ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS 最后评论者, -- 获取最后一个评论者名字,但用了rn_desc别名为最新时间排序别名以避免混淆(因为后面会用它来获取时间)LatestCommentTime(实际应使用最新的评价时间别名),避免歧义)因为这里使用的是最新的评价时间别名来获取时间),确保获取的是最新的评论者的评价时间。这样你就能得到每个文章的首次和最后的评论者及其对应的评价时间。然后你可以根据这个结果进一步处理得到你想要的格式。这里假设你已经有了正确的排序和分组逻辑。请注意,SQL 查询中的表名和列名需要根据实际情况替换。