在表格中我有一个字段,其中包含日期格式为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代码:
选择TBL_Metrics.Date,TBL_Metrics.MetricValue 来自TBL_Metrics 在哪里TBL_Metrics.Date(' 04/02 / 2015',' 29/03 / 2015',' 30/04 / 2015')
我不知道如何在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
我希望有人可以提供帮助! 非常感谢!
答案 0 :(得分:0)
您可以使用cte添加row number列,以帮助查找到月末的最近一天,然后查询该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
答案 1 :(得分:0)
如果我正确地阅读了您的问题,我认为您可以使用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