检索记录直到SQL表数据中的某一点
我有一组数据如下检索记录直到SQL表数据中的某一点,sql,google-bigquery,Sql,Google Bigquery,我有一组数据如下 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 20
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 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
我只想检索每个ticketID的用户(systemuser)之前的记录,并删除其余的记录
预期结果如下
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 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您可以尝试以下操作-您需要更改
分区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
#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
您可以尝试以下操作-您需要更改
分区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
下面是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
谢谢你,米哈伊尔。太好了@syncdm2012-绝对正确!这里的旗帜是布尔值:o)谢谢你,米哈伊尔。太好了@syncdm2012-绝对正确!这里的flag是一个布尔值:o)谢谢Fahmi..非常感谢。谢谢Fahmi..非常感谢。