T-SQL: SELECCIONE publicaciones donde la tendencia es a la baja en dos períodos de tiempo

Addeladde

Quiero evitar hacer una sub-selección en una tabla para comparar dos períodos y si la tendencia es a la baja.

Esta selección obtiene el porcentaje en un período

SELECT user, (SUM(value1)/SUM(value2)) AS percentage1
FROM table
WHERE (date BETWEEN @start1 AND @end1)
GROUP BY user
ORDER BY 2

Esta consulta obtiene el resultado que busco, pero no es muy eficiente porque hay más de 100 millones de filas.

SELECT t1.user, (SUM(t1.value1)/SUM(t1.value2)) AS percentage1,
(SELECT (SUM(t2.value1)/SUM(t2.value2)) AS percentage2
FROM table AS t2
WHERE t2.userID = t1.userID
AND (t2.date BETWEEN @start2 AND @end2)
)
FROM table AS t1
WHERE (t1.date BETWEEN @start1 AND @end1)
AND (SUM(t1.value1)/SUM(t1.value2)) < (SELECT (SUM(t2.value1)/SUM(t2.value2))
FROM table AS t2
WHERE t2.userID = t1.userID
AND (t2.date BETWEEN @start2 AND @end2)
)
GROUP BY t1.user

¿Existe una forma mejor de hacer esto? Una solución podría ser simplemente tener un período de fecha y luego agrupar en el mes (fecha), año (fecha) y comparar con el mes anterior en lugar de tener dos fechas exactas. Pero agrupar por mes y año solo da varias filas para cada usuario y eso quiero evitar.

Solo quiero un resultado limpio como este:

Adam, 43%, 47%
Lisa, 22%, 25%
John, 18%, 34%

Excluyendo filas como esta porque la tendencia es un porcentaje menor

Bill, 24%, 18%
Nina, 84%, 56%

SQL-Server 2016 Enterprise es la base de datos.

Serkan Arslan

Puedes probar esto.

SELECT G1.user, G1.percentage1, G2.percentage2 
FROM 
    ( SELECT t1.user, t1.userID
        (SUM(t1.value1)/SUM(t1.value2)) AS percentage1,
      FROM table AS t1
      WHERE 
        (t1.date BETWEEN @start1 AND @end1)
      GROUP BY t1.user, t1.userID
    ) AS G1
    INNER JOIN (
        SELECT t2.userID, (SUM(t2.value1)/SUM(t2.value2)) AS percentage2
        FROM table AS t2
        WHERE 
            (t2.date BETWEEN @start2 AND @end2)
        GROUP BY t2.userID
    ) AS G2 ON G1.userID = G2.userID
WHERE 
    G1.percentage1 < G2.percentage2

Pero si desea usar solo una selección de la tabla, también puede probar esto.

DECLARE @start DATE
DECLARE @end DATE

SET @start = CASE WHEN @start1 < @start2 THEN @start1 ELSE @start2 END
SET @end = CASE WHEN @end1 > @end2 THEN @end1 ELSE @end2 END

SELECT * FROM (
    SELECT t.userID, 
        SUM( CASE WHEN t.date BETWEEN @start1 AND @end1 THEN t.value1 END ) / SUM( CASE WHEN t.date BETWEEN @start1 AND @end1 THEN t.value2 END ) AS percentage1, 
        SUM( CASE WHEN t.date BETWEEN @start2 AND @end2 THEN t.value1 END ) / SUM( CASE WHEN t.date BETWEEN @start2 AND @end2 THEN t.value2 END ) AS percentage2, 
    FROM table AS t
    WHERE 
        (t.date BETWEEN @start AND @end)
    GROUP BY t.userID
) AS SQ WHERE percentage1 < percentage2

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

pandas: comparar la suma en dos períodos de tiempo?

SQL seleccione el registro cuya marca de tiempo MÁS ALTA es la MÁS BAJA

Consulta de SQL Server que indica la cantidad vendida en 3 períodos de tiempo diferentes

Seleccione la colección de Firebase Firestore donde la marca de tiempo es hoy

¡Ayuda SQL! Cómo crear una nueva columna que muestre la duración de tiempo entre dos períodos diferentes

¿Cuál es la diferencia entre deriva y tendencia en una serie de tiempo?

SQL: seleccione filas en la tabla A donde el recuento de filas en la tabla B es igual a x

Encontrar una tendencia a la baja en un marco de datos de pandas

Encontrar una tendencia a la baja en un marco de datos de pandas

Trazar períodos de tiempo en la línea de tiempo de pandas

Únase a dos DataFrames donde la clave de unión es diferente y solo seleccione algunas columnas

Seleccione períodos de días de la semana y hora

Seleccione de dos tablas y elimine donde coincida la ID

Cuente todos los elementos de la lista de períodos de tiempo en un período de tiempo

Cuente todos los elementos de la lista de períodos de tiempo en un período de tiempo

SQL Seleccione donde los valores EN la cadena de la lista

SQL Server: cálculo de la duración total de períodos de tiempo superpuestos

SQL Server: cálculo de la duración total de períodos de tiempo superpuestos

¿Puedo seleccionar dos períodos de tiempo al mismo tiempo usando la función Dataframe.between_time?

¿Cómo comparar dos tablas para calcular la tasa de crecimiento entre dos períodos de tiempo?

¿Cómo comparar dos tablas para calcular la tasa de crecimiento entre dos períodos de tiempo?

Seleccione dos palabras de período de tiempo de una cadena en la columna Pandas y conviértalas en número de días

SQL seleccione entradas de la tabla donde atributo es igual a parámetro, de lo contrario seleccione * entradas

SQL seleccione entradas de la tabla donde atributo es igual a parámetro, de lo contrario seleccione * entradas

SQL Server: seleccione el código de varios elementos donde la fecha es máxima

Seleccione la fecha entre dos marcas de tiempo

¿Cómo almacenar varios períodos de tiempo en la tabla MySQL?

Excluir períodos superpuestos en la función agregada de tiempo

Obtenga períodos de tiempo intermedios en SQL Server

TOP Lista

  1. 1

    ¿Cómo ocultar la aplicación web de los robots de búsqueda? (ASP.NET)

  2. 2

    Pandas의 CSV 파일을 Pandas 데이터 프레임으로 가져 오기

  3. 3

    uitableview delete button image in iOS

  4. 4

    Manera correcta de agregar referencias al proyecto C # de modo que sean compatibles con el control de versiones

  5. 5

    Swift / Firebase : Facebook 사용자가 계정을 만들 때 Firebase 데이터베이스에 제대로 저장하려면 어떻게해야합니까?

  6. 6

    caída condicional de filas desde un marco de datos de pandas

  7. 7

    Link library in Visual Studio, why two different ways?

  8. 8

    Pagination class not getting applied in html

  9. 9

    Que signifie Decimal (-1)?

  10. 10

    UIButton textLabel with different fonts

  11. 11

    WPF pleine largeur DataGridColumn sur la largeur de DataGrid

  12. 12

    Opción de máquina virtual no reconocida 'MaxPermSize = 512m' cuando se ejecuta Zeppelin

  13. 13

    matplotlib로 그래프를 그리는 동안 커서 위치에서 날짜 / 시간을 볼 수 없습니다. "DateFormatter에서 x = 0 값을 찾았습니다"라는 오류가 발생합니다.

  14. 14

    ¿Es posible en Windows evitar que otras aplicaciones se enganchen en las DLL del sistema?

  15. 15

    Error de la base de datos de Android Firebase: Permiso denegado al depurar en un teléfono

  16. 16

    Pandas: suma filas de DataFrame para columnas dadas

  17. 17

    ggplot2: gráfico con líneas y puntos para problemas de leyenda de dos conjuntos de datos

  18. 18

    ¿Cómo especificar el puerto en el que se aloja una aplicación ASP.NET Core?

  19. 19

    Recherche de la position d'index d'une valeur dans r dataframe

  20. 20

    GPU를 사용하여 ffmpeg 필터의 처리 속도를 가속화하는 방법은 무엇입니까?

  21. 21

    nested observables executed one after the other after termination

CalienteEtiquetas

Archivo