首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL查询按日期选择盛行风向

SQL查询按日期选择盛行风向
EN

Stack Overflow用户
提问于 2015-08-21 14:58:06
回答 1查看 130关注 0票数 1

我在Server 2012中有一个包含天气数据的表(每隔2分钟)

代码语言:javascript
运行
复制
 CREATE TABLE [dbo].[Test]
 (
     [SampleDateTime] [datetime] NULL,
     [Unit ID] [nvarchar](4) NULL,
     [WS Avg 2min] [float] NULL,
     [WD Avg 2min] [float] NULL,
     [WGS 10min] [float] NULL,
     [WGD 10min] [float] NULL,
     [Air Temp] [float] NULL,
     [Rel Humidity] [float] NULL,
     [Dew Point] [float] NULL,
     [Pyranometer] [float] NULL,
     [Quantum] [float] NULL,
     [Air Pressure] [float] NULL,
     [Snow Level] [float] NULL,
     [Rainfall] [float] NULL,
     [PW Current] [varchar](10) NULL,
     [Visibility] [float] NULL,
     [CBase 1] [float] NULL,
     [CBase 2] [float] NULL,
     [CBase 3] [float] NULL,
     [Vert Vis] [float] NULL
 ) ON [PRIMARY]

我正试着在一个月中的每一天得到流行的风向。所以基本上是每天的方向计数,返回最大计数。有了这个查询,我就接近了(从MS Access)

代码语言:javascript
运行
复制
SELECT 
    Day([SampleDateTime]) AS [Date], 
    Round([WD Avg 2min],0) AS  WindDir,
    Count(Round([WD Avg 2min],0)) AS [Count]
FROM 
    WeatherData
WHERE 
    (((Year([SampleDateTime]) * 12 + DatePart("m", [SampleDateTime])) = Year(Date()) * 12 + DatePart("m", Date()) - 0))
GROUP BY 
    Day([SampleDateTime]), Round([WD Avg 2min],0)
ORDER BY 
    Day([SampleDateTime]), Count(Round([WD Avg 2min],0)) DESC;

我得到了这个结果

代码语言:javascript
运行
复制
Date   WindDir  Count
1      74       45
1      342      11
1      331      11
1      333      11
1      338      10
2      48       20
2      45       20
2      42       20
2      50       17

我似乎无法获得查询返回相同的结果,但对于每个日期只有最大“计数”,如下所示

代码语言:javascript
运行
复制
Date   WindDir  Count
1      74       45
2      48       20

建议?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-21 15:17:01

我将猜测您的第一个查询是正确的,并希望减少到第二个结果。

使用CTE Using Common Table Expressions

SQL FIDDLE

代码语言:javascript
运行
复制
WITH month_direction as (
    SELECT 
        Day([SampleDateTime]) AS [Date], 
        Round([WD Avg 2min],0) AS  WindDir,
        Count(Round([WD Avg 2min],0)) AS [Count]
    FROM 
        WeatherData
    WHERE 
        (((Year([SampleDateTime]) * 12 + DatePart("m", [SampleDateTime])) = Year(Date()) * 12 + DatePart("m", Date()) - 0))
    GROUP BY 
        Day([SampleDateTime]), Round([WD Avg 2min],0)
    ORDER BY 
        Day([SampleDateTime]), Count(Round([WD Avg 2min],0)) DESC
),
max_count as (
    SELECT *, row_number() OVER (PARTITION BY date ORDER BY Count desc) as rnum
    FROM month_direction 
)
SELECT *
FROM max_count 
WHERE rnum = 1
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32143575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档