簡體   English   中英

SQL Server:比較同一表中的數據

[英]SQL Server : compare data in same table

我的數據庫是SQL Server 2012 SP1。

這是我的桌子:

  DATE            F1          F2        F3
2015-07-1         32           5        78
2015-08-20        18          45        67
2015-09-1         64           9        80
2015-09-30        12          78        45

現在,我想計算總和並僅選擇上個月與當前月份之間的差值,因此在此示例中,所選數據應在8月至9月之間,例如對於字段F1 ,它將采用8月的唯一值,是18,然后是9月64 + 12 = 76的兩個值,然后計算差值76-18,因此F1的值應為58。

提前致謝。

Select


    sum(case when Month(date) = month(curdatde()) and  Year(date) = Year(curdatde()) then F1 else null end)- sum(case when Month(date) = (month(curdatde())-1) and  Year(date) = Year(curdatde()) then F1 else null end) as'F1',
     sum(case when Month(date) = month(curdatde()) and  Year(date) = Year(curdatde()) then F2 else null end)- sum(case when Month(date) = (month(curdatde())-1) and  Year(date) = Year(curdatde()) then F2 else null end) as'F2', 
    sum(case when Month(date) = month(curdatde()) and  Year(date) = Year(curdatde()) then F3 else null end)- sum(case when Month(date) = (month(curdatde())-1) and  Year(date) = Year(curdatde()) then F3 else null end) as'F3' from your table

這適用於mySql

這可能是過度設計的,但是我認為它可以滿足您的需求。 我稱您的表為“ example_data”。 第一個CTE(summed_data)按月份對數據進行分組並匯總F列。 然后,第二個CTE將全部訂購,僅花費最近兩個月的時間(因此,這確實假設您沒有將來的數據)。 它使用ROW_NUMBER()將1分配給當前月份,將2分配給上個月。 然后,在最后的SELECT中,它將第二個CTE的結果自身連接起來。 使用行標識符來標識當前和以前的月份,然后取每一列的差額。

WITH summed_data (some_date, f1, f2, f3)
AS
(
  SELECT MAX(some_date), SUM(f1), SUM(f2), SUM(f3)
    FROM example_data
  GROUP BY MONTH(some_date), YEAR(some_date)
),
last_two_months (row_number, f1, f2, f3)
AS 
(
  SELECT TOP 2 ROW_NUMBER() OVER(ORDER BY some_date DESC), f1, f2, f3 
    FROM summed_data
  ORDER BY some_date DESC
)

SELECT CURRENT_MONTH.f1 - PRIOR_MONTH.f1, 
       CURRENT_MONTH.f2 - PRIOR_MONTH.f2, 
       CURRENT_MONTH.f3 - PRIOR_MONTH.f3
  FROM last_two_months CURRENT_MONTH, last_two_months PRIOR_MONTH
 WHERE CURRENT_MONTH.row_number = 1
   AND PRIOR_MONTH.row_number = 2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM