栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何获得下一个/上一个记录号?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何获得下一个/上一个记录号?

这将在所有主要的RDBMS(包括SQL Server和MySql)中都相同

*根据您的评论 *更新

SELECt name,        so_no,       (         SELECT MAX(so_no)FROM table1          WHERe so_no < t.so_no AND name = t.name       ) prev_so_no  FROM table1 t WHERe so_no = 'SO-00005'

SQL Server:

*根据您的评论 *更新

SELECt name,        MAX(so_no) so_no,        CASE WHEN MAX(so_no) = MIN(so_no)  THEN NULL ELSE MIN(so_no)       END prev_so_no  FROM(  SELECt TOP 2 t1.name, t1.so_no    FROM table1 t1 JOIN table1 t2      ON t1.name = t2.name   WHERe t2.so_no = 'SO-00005'     AND t1.so_no <= t2.so_no   ORDER BY so_no DESC) q   GROUP BY name

如果您使用的是 SQL Server 2012,
则还可以利用分析功能

LAG

SELECt name, so_no, prev_so_no  FROM(  SELECt name, so_no,         LAG(so_no, 1, NULL) OVER (ORDER BY so_no) prev_so_no,         ROW_NUMBER() OVER (ORDER BY so_no DESC) rnum    FROM table1   WHERe name = 'Adrian'     AND so_no <= 'SO-00005') qWHERe rnum = 1

或者

SELECt TOP 1 name, so_no, prev_so_no  FROM(  SELECt name, so_no,         LAG(so_no, 1, NULL) OVER (ORDER BY so_no) prev_so_no    FROM table1   WHERe name = 'Adrian'     AND so_no <= 'SO-00005') q ORDER BY so_no DESC

MySQL:

SELECt name,聽聽 聽 聽 聽MAX(so_no) so_no,聽聽 聽 聽 聽CASE WHEN MAX(so_no) = MIN(so_no)聽聽 聽 聽 聽 聽 聽 THEN NULL聽 聽 聽 聽 聽 聽 ELSE MIN(so_no)聽 聽 聽 聽END prev_so_no聽 FROM(聽 SELECt name, so_no聽 聽 FROM table1聽 聽WHERe name = 'Adrian'聽 聽 聽AND so_no <= 'SO-00005'聽 聽ORDER BY so_no DESC聽 聽LIMIT 2) q聽 聽GROUP BY name

或者

SELECt name,        SUBSTRING_INDEX(so_no, ',', 1) so_no,       CASE WHEN SUBSTRING_INDEX(SUBSTRING_INDEX(so_no, ',', 2), ',', -1) = SUBSTRING_INDEX(so_no, ',', 1) THEN NULL ELSE SUBSTRING_INDEX(SUBSTRING_INDEX(so_no, ',', 2), ',', -1)       END prev_so_no  FROM(  SELECt name, GROUP_CONCAt(so_no ORDER BY so_no DESC) so_no    FROM table1   WHERe name = 'Adrian'     AND so_no <= 'SO-00005'   GROUP BY name) q

所有查询的输出:

| NAME | SO_NO | PREV_SO_NO || -------- | ---------- | ------------ ||| 阿德里安| SO-00005 | SO-00002 |

这是 SQLFiddle 演示( SQL Server 2008
)已更新
这是 SQLFiddle 演示( SQL Server 2012
这是 SQLFiddle 演示( MySQL



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/517217.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号