Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
执行SQL查询还是存储过程?_Sql_Sql Server - Fatal编程技术网

执行SQL查询还是存储过程?

执行SQL查询还是存储过程?,sql,sql-server,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 ***列出id、日志日期、事件*** 2112,第1阶段

我们有一些数据如下所示:

***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
***列出id、日志日期、事件***
2112,第1阶段
2112,第二阶段
2112,出售
2113,第1阶段
2113,第6阶段
2114,第1阶段
2114,出售
我想获得挂牌id,即挂牌的持续时间(max_date-min_date),以备出售


当我的数据存储是MS SQL server时,如何实现这些重用?

GROUP BY和DATEDIFF以及一些案例应该可以做到这一点

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,…)
返回天数差异。要了解更多信息,请查看您的问题中是否有足够的详细信息,因此我猜可能是这样的

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

在发布问题之前,请先查看和。像“如何做”这样没有任何尝试或努力的问题在这里通常是不受欢迎的。谢谢你的回答。让我澄清一下。1) “售出”可能会出现,也可能不会出现。2) 如果没有发生,我们只需要最小日期和最大日期之间的差异。3)在“卖出”的情况下,它可能发生在最后一步或中间步骤。如果是中间步骤,我们只想考虑中间步骤的日期为max日期。非常感谢您的响应。但是,还有两个次要的要求。1)我想有一个状态栏(是否存在“卖掉”)。2)如果卖掉了,我想把卖出行中的日期当作最大日期,不必是全局最大值。请考虑。@ USE464-更新。你能试试吗?让我现在试试。解决一个问题。通过这个查询,我可以获得最新的“销售”日期,但它将有助于获得与最早销售相对应的日期。提前感谢。只需使用min(case…)即可