sql - 如何在sql中将过滤器分配给行号()函数
问题描述
在城镇不是奥斯汀的每种情况下,我都试图在 name = system 之后仅提取单行。
如果 1001 有 8 行,第 4 行是系统,则输出应该只有 Name=Terry 和 Date Moved=7/4/2019 的行(下一个带有城镇 /= Austin 的条目)
Case Name Town Date Moved Row #(Not in table)
1001 Ted Madisson 9/7/2018 1
1001 Joyal Boston 10/4/2018 2
1001 Beatrice Chicago 1/1/2019 3
1001 System Chicago 1/5/2019 4
1001 John Austin 4/11/2019 5
1001 Simon Austin 6/11/2019 6
1001 Terry Cleveland 7/4/2019 7
1001 Hawkins Newyork 8/4/2019 8
1002 Devon Boston 12/4/2018 1
1002 Joy Austin 12/7/2018 2
1002 Rachael Newyork 12/19/2018 3
1002 Bill Chicago 1/4/2019 4
1002 System Dallas 2/12/2019 5
1002 Phil Austin 3/16/2019 6
1002 Dan Seattle 5/18/2019 7
1002 Claire Birmingham 7/7/2019 8
尝试使用行号函数而不在 ('Austin') 过滤器中的子查询
ROW_NUMBER() OVER(PARTITION BY Case ORDER BY Moved_date ASC) AS ROWNUM
请注意,有 > 10k 个案例。
解决方案
你可以试试下面的脚本 -
WITH CTE AS
(
SELECT [Case],[Name],Town,[Date Moved],
ROW_NUMBER() OVER (PARTITION BY [Case] ORDER BY [Date Moved]) [Row #]
FROM your_table
)
SELECT A.*
FROM CTE A
INNER JOIN
(
SELECT C.[Case],C.Town,MAX(C.[Row #]) MRN
FROM CTE C
INNER JOIN
(
SELECT *
FROM CTE A
WHERE A.Name = 'System'
)D ON C.[Case] = D.[Case] AND C.[Row #] > D.[Row #]
AND C.Town = 'Austin'
GROUP BY C.[Case],C.Town
)B ON A.[Case] = B.[Case] AND A.[Row #] = B.MRN+1
输出是 -
Case Name Town Date Moved Row #
1001 Terry Cleveland 7/4/2019 6
1002 Dan Seattle 5/18/2019 7
推荐阅读
- php - While 循环中的 If 语句 - Php/Wordpress
- ruby - 如何组合和打印嵌套对象结构的值?
- ruby-on-rails - 当点击链接页面出现但js没有加载时,刷新页面后JS正在加载(Ruby on Rails应用程序)
- node.js - 从代理(脚本地址)事件后面获取 socket.io-client 以通过代理(脚本地址)发出
- c# - 返回一个由从 1 到 n 的数字的字符串表示形式组成的数组,在 C# 中
- python - 如何使用 Python 加密大文件?
- java - 根据条件同步调用异步方法
- node.js - 我需要在nodejs的系统级别修改网络摄像头流
- python - Python 通用异常不良实践概念
- python - Flask-WTForms:填充 FileField 字段