存储过程从一个 table 中获取日期范围并在另一个 table 中使用 WHERE 子句中的结果

Stored Procedure to take date range from one table and use the results in WHERE clause in another table

我正在尝试编写一个存储过程,它将从视图中获取 @start_dt@end_dt 参数,并将它们用作另一个 [=34= 上的 WHERE 子句中的参数].

我正在尝试获取 @start_dt@end_dt 之间的 HEATS 总数。然后我需要将此 SELECT 语句的结果插入 table.

如何在程序中声明 @start_dt@end_dt?我如何使用光标浏览每对 @start_dt@end_dt 并在加热时进行计数?

此查询已完成一半:

CREATE PROCEDURE sp_EAF_HEAT_COUNT
AS
    SELECT 
        @START_DT as START_DT, 
        @END_DT as END_DT, 
        COUNT(DISTINCT HEAT_ID) AS NUM_HEATS
    FROM 
        [SSABDB].[L2].[EAF_HEAT] 
    WHERE 
        PROCESS_UNIT = 'EAFA'
        AND START_DT > @START_DT 
        AND END_DT < @END_DT

    INSERT INTO DASH.EAFA_HEAT_COUNT (START_DT, END_DT, FURNACE, NUM_HEATS) 
    VALUES (@START_DT, @END_DT, 'A', NUM_HEATS)
END

看代码应该是直接插入,不需要游标

例如:

CREATE PROCEDURE sp_EAF_HEAT_COUNT(@START_DT  date, @END_DT date)    
AS
BEGIN
   INSERT 
     INTO DASH.EAFA_HEAT_COUNT 
          (START_DT
          , END_DT
          , FURNACE
          , NUM_HEATS
          ) 
  SELECT MAX(b.START_DT)
       , MAX(b.END_DT)
       , COUNT(distinct HEAT_ID) as NUM_HEATS
    FROM [SSABDB].[L2].[EAF_HEAT] a
    JOIN dbo.EAFA_T b
      ON a.START_DT > b.START_DT 
     AND a.END_DT < b.END_DT            
   WHERE a.PROCESS_UNIT = 'EAFA'
GROUP BY concat(convert(varchar(12),b.START_DT,101),'_',convert(varchar(12),b.END_DT,101))

END

再次根据评论更新!

还有一种方法。

CREATE PROCEDURE sp_EAF_HEAT_COUNT(@START_DT  DATETIME, @END_DT DATETIME)
  
AS
BEGIN

--Finding Count 
DECLARE @CNT_HEADID = (SELECT 
  SELECT Count(distinct HEAT_ID) as NUM_HEATS
  FROM [SSABDB].[L2].[EAF_HEAT] where PROCESS_UNIT = 'EAFA'
AND  START_DT > @START_DT and END_DT < @END_DT)
   
-- Inserting the Count
   INSERT INTO DASH.EAFA_HEAT_COUNT (START_DT, END_DT, FURNACE, NUM_HEATS) VALUES (@START_DT, @END_DT, 'A', @CNT_HEADID)
END
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO



CREATE PROCEDURE [dbo].[spEAFA_HEAT_COUNT]
 
AS
BEGIN

DECLARE 
       @START_DT datetime
       ,@END_DT datetime
       ,@CNT_HEATS INT


DECLARE tblCursor CURSOR FOR   
       SELECT 
               START_DT , END_DT
       FROM 
              dbo.EAFA_T
      
       ORDER BY 
              END_DT
  
OPEN tblCursor  
  
FETCH NEXT FROM tblCursor   
INTO @START_DT, @END_DT 
  
WHILE @@FETCH_STATUS = 0  
BEGIN  
select @CNT_HEATS = Count(distinct HEAT_ID)
  FROM [DATABASENAME].[SCHEMANAME].[TABLENAME] where PROCESS_UNIT = 'EAFA'
AND  START_DT > @START_DT and END_DT < @END_DT
 
INSERT INTO Dashboard.EAFA_HEAT_COUNT (START_DT, END_DT, FURNACE, NUM_HEATS) VALUES (@START_DT, @END_DT, 'A', @CNT_HEATS)
 
    FETCH NEXT FROM tblCursor   
    INTO @START_DT, @END_DT 
END  


CLOSE tblCursor;  
DEALLOCATE tblCursor;  


END
GO