我有一个表格,其中包含法案栏下的I和R日期,到目前为止,我能够获得duration_total,但我无法获得duration_before_issuing和processing_duration,因为所有确定位于同一个表格上的数据跟踪,所以我有一个挑战发现where t.Act = I and t.Act = R
同时给出结果,如上图所示。有什么建议吗?
我的SQL-Transact
SELECT t.product, r.pro_name, r.d_date, t.Date, DATEDIFF(t.Date, r.d_date) as duration_total
FROM tracking t, request r
WHERE t.product = r.product
AND t.Act ='R'
跟踪t
product | Act | Date
---------------------------
a | I | date-i
--------------------------
a | R | date-r
---------------------------
b | I | date-i
---------------------------
b | R | date-r
请求r
product | pro_name | d_date
------------------------------------------
a | wacha | date-d
------------------------------------------
b | wewe | date-d
结果
pro| pro_name | duration_before_issuing | processing_duration | duration_total
---------------------------------------------------------------------------------------------------
a | wacha | t.Date(date-i)- r.d_date(date-d) | t.Date(R) - t.Date(I) | t.Date(R)- r.Date(r.d_date)
---------------------------------------------------------------------------------------------------
b | wewe | t.Date(date-i)- r.d_date(date-d) | t.Date(R) - t.Date(I) | t.Date(R)- r.Date(r.d_date)
答案 0 :(得分:3)
你需要自己加入跟踪表,只选择其中一个的I记录,而只选择另一个的R记录。
SELECT t1.product, t2.date-r.d_date as duration_before_issuing, ...
FROM tracking t1
INNER JOIN tracking t2 ON t1.product=t2.product
INNER JOIN request r ON t.product = r.product
WHERE t1.act='R' and t2.act='I'
答案 1 :(得分:1)
正如Shadow评论的那样,您需要两次加入跟踪表。类似的东西:
SELECT r.product, r.pro_name, r.d_date,
DATEDIFF(t_issue.date, r.d_date) AS duration_before_issuing
DATEDIFF(t_done.date, t_issue.date) AS processing_duration
DATEDIFF(t_done.date, r.d_date) AS duration_total
FROM request r
INNER JOIN tracking t_issue ON r.product = t_issue.product AND t_issue.act='I'
INNER JOIN tracking t_done ON r.product = t_done.product AND t_done.act='R'
请注意,我已将request
作为查询的驱动表。我认为阅读起来会更清楚,但如果您需要处理尚未完成处理的情况,它也会有所帮助。在这种情况下,您的请求只有1个或0个跟踪日期。上面的查询不会为这些请求返回一行。要解决此问题,请尝试将LEFT JOIN
用于tracking
的一个或两个联接。或者,您可以使用UNION
组合处理不同情况的不同查询。