首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL -基于使用和月份的Trending

SQL -基于使用和月份的Trending
EN

Stack Overflow用户
提问于 2016-04-14 08:03:31
回答 1查看 457关注 0票数 1

我在创建一个基于数据库数据的趋势方面遇到了问题。

我尝试过使用这个查询;但是需要多个查询。此外,我想知道是否有更好的做法来这样做。

代码语言:javascript
复制
SELECT DISTINCT TOP 1
    billing.Accounts,
    billing.LastUsage,
    billing.CurrentUsage,
    billing.Total,
    billing.TIME AS Issued

FROM billing
    WHERE
        billing.TIME >= '2016-01-01'
    AND
        billing.TIME <= '2016-04-03'
    AND [top usage account]

ORDER BY
    billing.Total DESC

这里是我的数据库布局:

代码语言:javascript
复制
ID      Accounts    LastUsage   CurrentUsage    Total       TIME
----    --------    ---------   ------------    ------      -------
1       26 [FK]         150             200         50      2016-02-01 HH:mm:ss
2       26 [FK]         200             500        300      2016-03-23 HH:mm:ss
3       26 [FK]         500             800        300      2016-04-05 HH:mm:ss
4       27 [FK]           0             250        250      2016-04-05 HH:mm:ss
5       27 [FK]         800            1200        400      2016-06-05 HH:mm:ss

我想要实现的

首先,我想知道哪个是大用户,根据这个月的使用情况,在此之后,它将检索所有3个月前可用的记录,使其成为一种趋势。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-14 08:43:35

您可以尝试以下查询

代码语言:javascript
复制
select TOP 3 
    month(b1.time) monthnum,
    sum(total) monthlyusage
from billing b1 right join
    (
    select 
        top 1 Accounts, month(Time) monthnum from billing 
    where 
        --if using current datetime then use the commented portion below
        eomonth(Time)=eoMONTH(getdate()) 
        --Time >= '2016-01-01' AND TIME <= '2016-04-03'
    order by 
        sum(Total) over(partition by Accounts, month(Time) order by Accounts) desc
    ) b2
    on b1.Accounts=b2.Accounts 
group by month(b1.time)
order by month(b1.time)

SQL小提琴演示

更新

查看我的sql篡改结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36617099

复制
相关文章

相似问题

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