如何解决检索记录直到SQL表数据中的某个点
我有一组数据,如下所示
ticketID user transdate
---------------------------------
101 serviceuser1 2019-06-03
101 serviceuser2 2019-06-03
101 systemuser 2019-06-04
101 serviceuser1 2019-06-04
101 serviceuser1 2019-06-05
102 serviceuser2 2019-06-03
102 serviceuser2 2019-06-03
102 serviceuser1 2019-06-05
102 systemuser 2019-06-06
103 serviceuser2 2019-06-03
103 serviceuser1 2019-06-03
103 systemuser 2019-06-06
103 serviceuser2 2019-06-06
我只想检索每个ticketID的记录,直到用户(系统用户),然后消除其余的记录。
预期结果如下
ticketID user transdate
-------------------------------
101 serviceuser1 2019-06-03
101 serviceuser2 2019-06-03
101 systemuser 2019-06-04
102 serviceuser2 2019-06-03
102 serviceuser2 2019-06-03
102 serviceuser1 2019-06-05
102 systemuser 2019-06-06
103 serviceuser2 2019-06-03
103 serviceuser1 2019-06-03
103 systemuser 2019-06-06
尝试执行如下所示的排名功能
SELECT *
FROM
(SELECT
ticketid,user,ROW_NUMBER() OVER (ORDER BY transdate partition by ticketid) AS rownumber
FROM TableName) AS temptable
这给我排名,之后是如何过滤所需的行。我正在使用标准SQL
解决方法
您可以尝试以下操作-您需要更改partition by
子句
SELECT * FROM
(
SELECT ticketid,user,ROW_NUMBER() OVER (partition by ticketed,user order by transdate) AS rownumber FROM TableName
) as temptable where rownumber=1
,
以下是用于BigQuery标准SQL
#standardSQL
SELECT * EXCEPT(flag) FROM (
SELECT *,0 = COUNTIF(user = 'systemuser') OVER(win) flag
FROM `project.dataset.table`
WINDOW win AS (PARTITION BY ticketID ORDER BY transdate ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING)
)
WHERE flag
应用于问题中的样本数据时-输出为
Row ticketID user transdate
1 101 serviceuser1 2019-06-03
2 101 serviceuser2 2019-06-03
3 101 systemuser 2019-06-04
4 102 serviceuser2 2019-06-03
5 102 serviceuser2 2019-06-03
6 102 serviceuser1 2019-06-05
7 102 systemuser 2019-06-06
8 103 serviceuser2 2019-06-03
9 103 serviceuser1 2019-06-03
10 103 systemuser 2019-06-06
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。