首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据具体情况选择记录

问如何根据具体情况选择记录
EN

Stack Overflow用户
提问于 2019-03-27 21:29:24
回答 3查看 38关注 0票数 1

我有一个名为"ticket_lc“的表,如下所示

​

​

从上面的表格中,我只需要挑选满足条件的记录

条件:工单状态应为已分配、已关闭、已解决

因此,在上表中,只有102个票证满足条件,如果票证包含这3个以外的其他票证,则我的查询不应选择这些票证。

有人能帮我吗..!

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-03-27 22:09:42

下面是针对BigQuery标准SQL的说明

代码语言:javascript
复制
#standardSQL
SELECT ticket_id
FROM `project.dataset.ticket_lc`
GROUP BY ticket_id
HAVING COUNT(DISTINCT status) = 3
AND COUNTIF(LOWER(status) NOT IN ('assigned', 'closed', 'resolved')) = 0 

你可以使用你的问题中的样本数据来测试,玩上面的游戏,如下面的例子

代码语言:javascript
复制
#standardSQL
WITH `project.dataset.ticket_lc` AS (
  SELECT 101 ticket_id, 'Assigned' status UNION ALL
  SELECT 101, 'Pending' UNION ALL
  SELECT 101, 'Resolved' UNION ALL
  SELECT 101, 'Closed' UNION ALL
  SELECT 102, 'Assigned' UNION ALL
  SELECT 102, 'Resolved' UNION ALL
  SELECT 102, 'Closed' UNION ALL
  SELECT 103, 'Assigned' UNION ALL
  SELECT 103, 'Pending' UNION ALL
  SELECT 103, 'Pending' UNION ALL
  SELECT 103, 'Assigned' UNION ALL
  SELECT 103, 'Resolved' UNION ALL
  SELECT 103, 'Closed' 
)
SELECT ticket_id
FROM `project.dataset.ticket_lc`
GROUP BY ticket_id
HAVING COUNT(DISTINCT status) = 3
AND COUNTIF( LOWER(status) NOT IN ('assigned', 'closed', 'resolved')) = 0 

有结果

代码语言:javascript
复制
Row ticket_id    
1   102  
票数 1
EN

Stack Overflow用户

发布于 2019-03-27 21:33:05

您可以进行聚合:

代码语言:javascript
复制
select ticket_id
from table t
group by ticket_id
having sum( case when status not in ('assigned', 'closed', 'resolved') then 1 else 0 end ) = 0 and
       count(*) = 3;

如果票证的状态重复,请在count()中使用distinct。

票数 1
EN

Stack Overflow用户

发布于 2019-03-27 22:33:46

这是个有趣的问题。我想出了这个检查,如果一切都涵盖了,金额是正确的:

代码语言:javascript
复制
WITH t AS (SELECT * FROM UNNEST(
  [struct(101 as ticket_id, 'assigned' as status),(101,'closed'),
    (102,'assigned'),(102,'resolved'),(102,'closed'),
    (104,'assigned'),(104,'assigned'),(104,'closed'),
    (103,'assigned'),(103,'pending'),(103,'pending'),(103,'assigned'),(103,'resolved'),(103,'closed')]  
  )
)

SELECT ticket_id, array_agg(distinct status) as st 
FROM t
group by 1
having (SELECT count(1)=3 FROM unnest(st) a left join unnest(['assigned','resolved','closed']) b on a=b)

包括调整后的样本数据,以涵盖更多问题案例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55378425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档