wstcl 2024-09-21 18:38 采纳率: 0%
浏览 12
已结题

两条数据合并成一条数据

假如一这样一张表,如果合并成第二张表这样
标题 评论者 评价时间
文章A 张三 2023/4/1
文章A 李四 2003/4/2
文章A 赵五 2023/4/3
文章B 李明 2023/4/2
文章B 张红 2023/4/10

标题 首位评论者 首次评论者 最后评论者 最后评论者
文章A 张三 2023/4/1 赵五 2023/4/3
文章B 李明 2023/4/2 张红 2023/4/10

  • 写回答

30条回答 默认 最新

  • 一轮明月照丘壑 2024-09-21 18:39
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    在 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 查询中的表名和列名需要根据实际情况替换。
    
    评论

报告相同问题?

问题事件

  • 系统已结题 9月29日
  • 创建了问题 9月21日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?