【问题标题】:Calculate Time Difference in Single Column Based on Criteria from Other Columns in Tableau根据 Tableau 中其他列的条件计算单列中的时间差
【发布时间】:2018-08-05 07:25:21
【问题描述】:

我有一个用作状态更改日志的数据库表。所有时间戳都在一个列中提供。我需要计算每个“on_id”的特定状态更改之间经过的时间(以分钟为单位)。正如您从我的示例数据中看到的那样,我不能简单地计算从一行到下一行的差异,因为在单个“on_id”的状态更改之间存在不相关的行。

id          state                 from_state                to_state                   start_time             on_id   user_id 
45   transition_failed      volunteer_to_donor       claimed                  2016-11-28 18:05:59.509807+00      10        53  
 1   transition_completed   drafting                 available                2016-11-10 19:56:16.454458+00       2        12  
 2   transition_failed      available                available                2016-11-10 19:57:01.199609+00       2        12  
 3   transition_failed      available                available                2016-11-10 19:58:08.134549+00       2        12  
28   transition_completed   volunteer_to_donor       volunteer_to_recipient   2016-11-22 22:14:57.060536+00       9        51  
 4   transition_completed   drafting                 available                2016-11-14 16:36:17.802104+00       3        12  
 5   transition_completed   drafting                 available                2016-11-16 14:59:56.925226+00       5        15  
29   transition_failed      volunteer_to_recipient   volunteer_to_donor       2016-11-22 22:51:01.250038+00       9        51  
 6   transition_completed   drafting                 available                2016-11-16 18:04:04.172773+00       6        15  
 7   transition_completed   available                claimed                  2016-11-16 18:05:23.30427+00        6        16  
30   transition_failed      volunteer_to_recipient   volunteer_to_recipient   2016-11-22 22:51:12.458881+00       9        51  
 8   transition_completed   claimed                  volunteer_to_donor       2016-11-16 18:05:28.546312+00       6        16  
 9   transition_completed   volunteer_to_donor       volunteer_to_recipient   2016-11-16 18:05:39.388517+00       6        16  
10   transition_failed      volunteer_to_recipient   volunteer_to_recipient   2016-11-16 18:05:48.772071+00       6        16  
11   transition_completed   volunteer_to_recipient   complete                 2016-11-16 18:06:56.9068+00         6        16  
31   transition_completed   volunteer_to_recipient   complete                 2016-11-22 22:51:38.570253+00       9        51  
12   transition_completed   drafting                 available                2016-11-21 15:11:01.842671+00       7        12  

我认为我需要一个计算字段,但我不知道要使用的语法或函数。

例如,我希望能够计算每个“on_id”从“可用”状态变为“已声明”状态所用的时间。对于 on_id 6,这需要 1 分 19 秒。

id          state                 from_state                to_state                   start_time             on_id   user_id 

6   transition_completed   drafting                 available                2016-11-16 18:04:04.172773+00       6        15  
7   transition_completed   available                claimed                  2016-11-16 18:05:23.30427+00        6        16  

【问题讨论】:

  • 更新您的问题添加适当的数据样本和预期结果
  • 谢谢,我已按要求更新了我的问题。

标签: mysql tableau-api datediff calculated-field


【解决方案1】:

我在这里创建了示例表和 sql:希望对您有所帮助。

Create table tbl(
  Id int, 
  to_state varchar (10), 
  On_id int,
dte date);

 Insert into tbl values ( 1, 'available', 6, '2018-02-22')
 , ( 2, 'claimed' , 6 , '2018-02-25')
 , ( 3, 'drafted' , 6 , '2018-02-23);

Sql:
Select distinct 
t1.on_id,
t2.availstartdte,
t2.claimstartdte,
datediff(t2.claimstartdte, t2.availstartdte) as date_diff
From tbl t1
Join ( select id, 
      (Select Max(b.dte) from tbl b where b.to_state='available' and a.on_id=b.on_id) as availstartdte,
      (Select Max(b.dte) from tbl b where b.to_state='claimed' and a.on_id=b.on_id) as claimstartdte
      From tbl a
      Where a.to_state in('available', 'claimed')
      ) t2
 On t1.id = t2.id

结果:

on_id   availstartdte   claimstartdte   date_diff
6             2018-02-22    2018-02-25          3

【讨论】:

  • 谢谢!不幸的是,我对该表所属的数据库具有“只读”访问权限。我可以在导出的数据上使用它,但不能与数据库的实时连接。您能想出一种无需创建新表即可完成此任务的方法吗?
  • 我不建议你创建一个表。我正在说明我的查询是从您提供的示例中提取的。顺便问一下,你打算用什么来计算时差? Excel?或者是其他东西?你的标签上写着 mysql,所以我使用了 mysql。此外,您没有输入预期的结果(带有列)。我很难读懂你的心思。请理解。
猜你喜欢
  • 2021-10-05
  • 1970-01-01
  • 2019-05-20
  • 2021-10-10
  • 2018-12-05
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
相关资源
最近更新 更多