簡體   English   中英

查找每個月最接近月底的日期

[英]Find closest date to month end for each month

在一個表中,我有一個包含日期的字段,格式為dd / mm / yyyy:

TBL_Metrics:
DATE | MetricValue
03/02/2015 | 99.1%
04/02/2015 | 97.3%
03/03/2015 | 94.5%
29/03/2015 | 93.6%
07/04/2015 | 43.9%
30/04/2015 | 94.2%
...

我想建立一個SQL代碼,將調查所有這些日期和:

  1. 檢測日期的月份
  2. 在每個月內,查找最接近月底的日期(在上面的簡短示例中,對於2月,最接近月底的日期是04/02/2015)
  3. 在選擇查詢中重復使用最接近月末的日期:

在('04 / 02/2015','29/03/2015','30/04/2015')中從TBL_Metrics的TBL_Metrics.Date中選擇TBL_Metrics.Date,TBL_Metrics.MetricValue

我不知道如何在sql中執行此操作,目前我在VBA中執行此操作,但是它迫使我必須要有一個具有數據庫連接的虛擬電子表格,首先要檢索所有日期,然后在所有日期上循環以查找最接近的日期月底,然后我可以構建要在另一個spreqdsheet中使用的查詢,這很麻煩。

這里給你一個想法是我如何在vba中找到最接近月底的日期:

dat1month = January
dat2month = February
dat3month = March
For i = 2 To LR
    If MonthName(Month(ActiveSheet.Cells(i, 3))) = dat1month Then
        If ActiveSheet.Cells(i, 3) > Dat1max Then
            Dat1max = ActiveSheet.Cells(i, 3)
        End If
    ElseIf MonthName(Month(ActiveSheet.Cells(i, 3))) = dat2month Then
        If ActiveSheet.Cells(i, 3) > Dat2max Then
            Dat2max = ActiveSheet.Cells(i, 3)
        End If
    ElseIf MonthName(Month(ActiveSheet.Cells(i, 3))) = dat3month Then
        If ActiveSheet.Cells(i, 3) > Dat3max Then
            Dat3max = ActiveSheet.Cells(i, 3)
        End If
    End If
Next i

希望有人能幫忙! 非常感謝!

您可以使用cte添加行號列,以幫助查找距月底最近的日期,然后查詢該cte:

;With cte as
(
  SELECT Date, MetricValue, ROW_NUMBER() OVER(PARTITION BY YEAR(Date), MONTH(Date) ORDER BY Day(Date) DESC) rn
  FROM TBL_Metrics
)

SELECT Date, MetricValue
FROM cte 
WHERE rn = 1

如果我正確閱讀了您的問題,我認為您可以使用SQL排名功能ROW_NUMBER來提供幫助,例如...

SELECT  Date ,
        MetricValue
FROM    (
            SELECT  Date ,
                    MetricValue ,
                    ROW_NUMBER() OVER PARTITION BY (YEAR(Date), MONTH(Date) ORDER BY Date DESC)
            FROM    TBL_Metrics
        ) x

暫無
暫無

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

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