检索记录直到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..非常感谢。