Sql server 如何按最近6个月的间隔计算组数?

Sql server 如何按最近6个月的间隔计算组数?,sql-server,Sql Server,我正试着每隔6个月计算一次,我有整整一年的时间,我需要像这样: 这不是代码 IdEmpresa = CompanyID CompanyID = 1 / MONTH(1 TO 6) / YEAR 2019 CompanyID = 1 / MONTH(7 TO 12) / YEAR 2019 CompanyID = 2 / MONTH(1 TO 6) / YEAR 2019 CompanyID = 2 / MONTH(7 TO 12) / YEAR 2019 CompanyID = 1 / MON

我正试着每隔6个月计算一次,我有整整一年的时间,我需要像这样:

这不是代码

IdEmpresa = CompanyID
CompanyID = 1 / MONTH(1 TO 6) / YEAR 2019
CompanyID = 1 / MONTH(7 TO 12) / YEAR 2019
CompanyID = 2 / MONTH(1 TO 6) / YEAR 2019 
CompanyID = 2 / MONTH(7 TO 12) / YEAR 2019
CompanyID = 1 / MONTH(1 TO 6) / YEAR 2020
CompanyID = 1 / MONTH(7 TO 12) / YEAR 2020
继续下去,总是每隔6个月

把这个时间间隔的计数拿来,正如你在我试图用的img吼叫中所看到的:

COUNT(C.Id) OVER (PARTITION BY YEAR(P.DATACADASTRO), MONTH(P.DATACADASTRO), C.IdEmpresa) AS PP
在我把它放到CTE表达式中之后,你可以在下面的公式中看到 然而,我不能带来正确的结果

WITH SUP AS 
(
SELECT DISTINCT C.Id AS IdCarro, C.Placa, P.DataCadastro,
MONTH(P.DATACADASTRO) AS MONTH, YEAR(P.DATACADASTRO) AS YEARS, C.IdEmpresa,
CASE 
WHEN P.DataCadastro < DATEADD(YEAR,-1,GETDATE())
THEN '>1 YEAR'
WHEN P.DataCadastro >= DATEADD(YEAR,-1,GETDATE())
THEN '<=1 YEAR'
ELSE 'NOT FOUND'
END AS WHOLE_YEAR,
        
CONCAT(C.IdEmpresa, YEAR(P.DATACADASTRO), MONTH(P.DATACADASTRO), c.IdEmpresa) AS KEY_SUP_Carro,
COUNT(C.Id) OVER (PARTITION BY  DATEADD(MONTH,3,GETDATE())) AS SEMESTER,
COUNT(C.Id) OVER (PARTITION BY YEAR(P.DATACADASTRO), MONTH(P.DATACADASTRO)) AS PP
        
FROM Pedido P WITH (NOLOCK) 
INNER JOIN Carro C WITH (NOLOCK) ON P.IdCarro = C.Id 
AND C.Placa NOT IN ('') AND C.Ativo = 1 AND C.IdEmpresa IN (1, 24, 26, 27)
        
)
SELECT COUNT(IdCarro) AS Contagem, MONTH, YEARS, IdEmpresa, WHOLE_YEAR, KEY_SUP_Carro, 
SEMESTER, PP
       
FROM SUP
GROUP BY MONTH, YEARS, IdEmpresa, WHOLE_YEAR, KEY_SUP_Carro, SEMESTER, PP
        
HAVING WHOLE_YEAR = '<=1 YEAR'
ORDER BY IdEmpresa, YEARS, MONTH DESC
带有SUP AS
(
选择不同的C.Id,如IdCarro、C.Placa、P.DataCadastro、,
月(P.DATACADASTRO)表示月,年(P.DATACADASTRO)表示年,C.IdEmpresa,
案例
当P.DataCadastro=DATEADD(年份,-1,GETDATE())
然后我就这样解决了:
只是在我的分区中添加了一个“case”,用来计算我的ID

```COUNT(C.Id) OVER (PARTITION BY YEAR(P.DATACADASTRO),
CASE 
WHEN MONTH(P.DATACADASTRO) >= 1 AND MONTH(P.DATACADASTRO) <= 6
THEN 1
WHEN MONTH(P.DATACADASTRO) >= 7 AND MONTH(P.DATACADASTRO) <= 12
THEN 2
END, C.IdEmpresa) AS PULSE_IdCarro```
``按年份划分的分区计数(C.Id)(P.DATACADASTRO),
案例

当MONTH(P.DATACADASTRO)>=1,MONTH(P.DATACADASTRO)=7,MONTH(P.DATACADASTRO)@DaleK感谢您的陈述,正如您所说:)