鱼C论坛

 找回密码
 立即注册
查看: 1903|回复: 1

mssql问题

[复制链接]
发表于 2024-1-2 15:33:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Id Name PWpId RegDate
8923100136-100-006-009 20℃直流电阻 8923100136-100-006-01 2022/8/8 12:15:00.000
8923100136-100-008-009 20℃直流电阻 8923100136-100-008-01 2022/9/7 19:54:45.000
8923100136-100-009-009 20℃直流电阻 8923100136-100-009-02 2023/11/9 12:56:54.000
8923100137-100-004-009 20℃直流电阻 8923100137-100-004-01 2022/7/30 13:51:19.000
8923100137-100-009-009 20℃直流电阻 8923100137-100-009-01 2022/9/7 19:56:15.000
8923100137-100-011-009 20℃直流电阻 8923100137-100-011-01 2022/9/30 12:13:18.000
8923100137-100-012-009 20℃直流电阻 8923100137-100-012-02 2023/3/8 11:17:47.000
8923100137-100-013-009 20℃直流电阻 8923100137-100-013-03 2023/11/9 12:56:54.000
8923100137-120-001-009 20℃直流电阻 8923100137-120-001-01 2022/5/6 10:57:09.000
8923100138-100-002-009 20℃直流电阻 8923100138-100-002-01 2022/7/28 19:00:40.000
8923100138-100-009-009 20℃直流电阻 8923100138-100-009-01 2022/9/7 19:56:15.000
8923100138-100-011-009 20℃直流电阻 8923100138-100-011-01 2022/9/30 12:13:31.000
8923100138-100-012-009 20℃直流电阻 8923100138-100-012-02 2023/11/9 12:56:54.000
数据存储在mssql中,字段包含Id、Name、PWpId和RegDate。
1.对Id进行处理,取出前10个字符作为A列。
2.对Id进行处理,取出后7个字符作为B列。
3.最后按A列数据进行分组,取出B列值最大的那行数据
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-1-2 15:33:50 | 显示全部楼层
首先,你可以使用 SUBSTRING 函数来截取字符串的前后几个字符。以下是实现此任务的 SQL 查询语句:

  1. SELECT
  2.     SUBSTRING(Id, 1, 10) AS A,
  3.     SUBSTRING(Id, LEN(Id) - 6, 7) AS B,
  4.     Name,
  5.     PWpId,
  6.     RegDate
  7. FROM
  8.     YourTableName
复制代码


这将返回一个结果集,包含 A 列、B 列、Name 列、PWpId 列和 RegDate 列。

接下来,我们需要按照 A 列进行分组,然后找出 B 列值最大的那行数据。可以使用 ROW_NUMBER() 函数以及 OVER 子句来实现此目标。以下是相应的 SQL 查询语句:

  1. WITH CTE AS (
  2.     SELECT
  3.         SUBSTRING(Id, 1, 10) AS A,
  4.         SUBSTRING(Id, LEN(Id) - 6, 7) AS B,
  5.         Name,
  6.         PWpId,
  7.         RegDate,
  8.         ROW_NUMBER() OVER (PARTITION BY SUBSTRING(Id, 1, 10) ORDER BY B DESC) AS RN
  9.     FROM
  10.         YourTableName
  11. )
  12. SELECT
  13.     A,
  14.     B,
  15.     Name,
  16.     PWpId,
  17.     RegDate
  18. FROM
  19.     CTE
  20. WHERE
  21.     RN = 1
复制代码


这将返回一个结果集,其中包含 A 列、B 列、Name 列、PWpId 列和 RegDate 列。只有在 B 列的值是每个 A 列分组中最大的情况下,才会返回该行数据。

请确保将 `YourTableName` 替换为你实际的表名。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-24 05:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表