SQL查询以查找下一个STAU并获取它们之间的时间
我在争论bigquery中的sql查询,我有一个包含多个票证号的表,以及来自票证的所有其他数据。我想知道在一个特定的州,谁持有一张长票 我的数据如下所示:SQL查询以查找下一个STAU并获取它们之间的时间,sql,google-bigquery,Sql,Google Bigquery,我在争论bigquery中的sql查询,我有一个包含多个票证号的表,以及来自票证的所有其他数据。我想知道在一个特定的州,谁持有一张长票 我的数据如下所示: SELECT TicketNumber, State, SUM(DateDiff) FROM (SELECT ticket_details.TicketNumber, ticket_state.State, DATEDIFF(DateUpdated,DateCreated) AS DateDiff FROM ticket_de
SELECT TicketNumber, State, SUM(DateDiff)
FROM
(SELECT ticket_details.TicketNumber, ticket_state.State, DATEDIFF(DateUpdated,DateCreated) AS DateDiff FROM ticket_details
LEFT JOIN ticket_state
ON ticket_details.TicketNumber = ticket_state.TicketNumber) TableDetailState
WHERE State = 'Awaiting User'
GROUP BY TicketNumber
票号|日期更新|状态|注释|
我正试图得到这个:
票号|日期更新|状态|下一状态|日期更改
我一直在玩各种不同的查询,但我似乎总是得到重复。像这个:
SELECT distinct allinc.TicketNumber as inc, allinc.state, DateChanged, allinc.TicketNumber, nextupdate
FROM `incidents` allinc
left outer join (
select *, CAST(DateUpdated AS datetime) as DateChanged, state as DateChanged from `incidents`
) resinc
on allinc.TicketNumber = resinc.TicketNumber and CAST(resinc.DateChanged AS datetime) > CAST(allinc.TicketNumber AS datetime)
where allinc.state = 'Awaiting User'
order by inc
最终目标是获取票证设置为“等待用户”的总时间,但每个票证的总时间可以是多次
任何建议都很好。我想你是在描述
lead()
:
我认为您正在描述
lead()
:
我建议你先规范一下你的桌子。我认为最好是把票的细节放在一张桌子上,而票的州放在另一张桌子上 票证详细信息(PK票证编号,其他详细信息) 票证状态(PK票证编号、PK日期创建、日期更新、状态) 这样,一张票可以根据需要有多个州。至于状态更改,您可以在ticket_状态中插入一条具有相同TicketNumber的新记录,新记录的创建日期将是前一条记录的更新日期 对于获取处于给定状态(如“等待用户”)的总时间的查询,您可能可以执行以下操作:
SELECT TicketNumber, State, SUM(DateDiff)
FROM
(SELECT ticket_details.TicketNumber, ticket_state.State, DATEDIFF(DateUpdated,DateCreated) AS DateDiff FROM ticket_details
LEFT JOIN ticket_state
ON ticket_details.TicketNumber = ticket_state.TicketNumber) TableDetailState
WHERE State = 'Awaiting User'
GROUP BY TicketNumber
我建议你先规范一下你的桌子。我认为最好是把票的细节放在一张桌子上,而票的州放在另一张桌子上 票证详细信息(PK票证编号,其他详细信息) 票证状态(PK票证编号、PK日期创建、日期更新、状态) 这样,一张票可以根据需要有多个州。至于状态更改,您可以在ticket_状态中插入一条具有相同TicketNumber的新记录,新记录的创建日期将是前一条记录的更新日期 对于获取处于给定状态(如“等待用户”)的总时间的查询,您可能可以执行以下操作:
SELECT TicketNumber, State, SUM(DateDiff)
FROM
(SELECT ticket_details.TicketNumber, ticket_state.State, DATEDIFF(DateUpdated,DateCreated) AS DateDiff FROM ticket_details
LEFT JOIN ticket_state
ON ticket_details.TicketNumber = ticket_state.TicketNumber) TableDetailState
WHERE State = 'Awaiting User'
GROUP BY TicketNumber
您正在使用什么RDBMS(mysql、sql server、postgres、oracle等)?@BobBryden。示例数据和期望的结果也会有所帮助。您正在使用什么RDBMS(mysql、sql server、postgres、oracle等)?@BobBryden。样本数据和期望的结果也会有所帮助。先生,您是一位英雄!我从来没有听说过铅,谢谢你的帮助。你是个英雄!我从未听说过铅,谢谢你的帮助。