Query para últimos 4 meses

Quisiera saber su hay alguna forma dinámica de presentrar la información de los últimos 4 meses de ventas con la siguiente información
Asesor Precio Mes
Harold Rodriguez 1399000 Enero
Harold Rodriguez 1599000 Febrero
Harold Rodriguez 1299000 Marzo
Harold Rodriguez 1299000 Abril
Harold Rodriguez 129900 Mayo
...
Siendo que al agregar más ventas de otro mes, no tenga que alterar el query, de tal manera que sea dinámico. Y siempre resente solo las ventas de los últimos 4 meses.
Por ejemplo con la info de arriba, solo presente Febrero-Mayo
Gracias!
{"lat":19.4067478242024,"lng":-99.239866733551}

1 respuesta

Respuesta
1
Asumiendo que tu tabla de ventas la tienes como la muestras (Asesor, Precio y Mes), podrías agregar un pequeño catalogo de Meses para poderlo cruzar con el mes actual y los 3 meses anteriores y poder sacar los 4 meses que debes mostrar. Podría quedar algo como esto:
-- Crea el catalogo de Meses
CREATE TABLE [dbo]. [Cat_Meses](
    [IdMes] [int] NOT NULL,
    [Mes] [varchar](50) NOT NULL
) ON [PRIMARY]
-- Agrega los meses
INSERT INTO Cat_Meses values (1,'Enero')
INSERT INTO Cat_Meses values (2,'Febrero')
INSERT INTO Cat_Meses values (3,'Marzo')
INSERT INTO Cat_Meses values (4,'Abril')
INSERT INTO Cat_Meses values (5,'Mayo')
INSERT INTO Cat_Meses values (6,'Junio')
INSERT INTO Cat_Meses values (7,'Julio')
INSERT INTO Cat_Meses values (8,'Agosto')
INSERT INTO Cat_Meses values (9,'Septiembre')
INSERT INTO Cat_Meses values (10,'Octubre')
INSERT INTO Cat_Meses values (11,'Noviembre')
INSERT INTO Cat_Meses values (12,'Diciembre')
-- Esta consulta saca la info de los ultimos 4 meses incluido el actual
select    v.*
from    Tabla_Ventas v
        INNER JOIN (SELECT    *
                    FROM    Cat_Meses
                    WHERE    IdMes = datepart(mm,getdate())
                    Union
                    SELECT    *
                    FROM    Cat_Meses
                    WHERE    IdMes = datepart(mm,dateadd(mm,-1,getdate()))
                    Union
                    SELECT    *
                    FROM    Cat_Meses
                    WHERE    IdMes = datepart(mm,dateadd(mm,-2,getdate()))
                    Union
                    SELECT    *
                    FROM    Cat_Meses
                    WHERE    IdMes = datepart(mm,dateadd(mm,-3,getdate()))) M ON    v.Mes = M.Mes

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas