Perfoming SQL查询或存储过程?

时间:2017-01-16 12:06:00

标签: sql sql-server

我们有一些看起来像这样的数据:

***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服务器时,如何实现这些重新连接?

2 个答案:

答案 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