我们有一些看起来像这样的数据:
***listing_id,log_date,event***
2112,<date>,stage_1
2112,<date>,stage_2
2112,<date>,sold
2113,<date>,stage_1
2113,<date>,stage_6
2114,<date>,stage_1
2114,<date>,sold
我想获得listing_id,它所列出的持续时间(max_date - min_date),以防它被出售。
当我的数据存储是MS SQL服务器时,如何实现这些重新连接?
答案 0 :(得分:1)
GROUP BY和DATEDIFF以及一些CASE应该
select
listing_id,
datediff(dd, min(log_date),
case
when count(case when event = 'sold' then 1 end) > 0 then
max(case when event = 'sold' then log_date end)
else
max(log_date)
end
) duration,
case
when count(case when event = 'sold' then 1 end) > 0 then
'Yes'
else
'No'
end was_sold
from your_table
group by
listing_id
;
如果您想获得最早的销售日期,可以使用以下内容
min(case when event = 'sold' then log_date end)
datediff(dd,....)
以天为单位返回差异。有关详情,请查看this out
答案 1 :(得分:0)
在你的问题中没有足够详细,所以我猜测但可能是类似的东西;
SELECT
listing_id,
MIN(log_date) AS Start,
MAX(log_date) AS Finish,
datediff(day, MIN(log_date), MAX(log_date) AS Duration
FROM YourTable
GROUP BY
listing_id