A. 如何用sql的日期函数,分别查出1月~12月每个月的销售金额
一般情况下数据是按日期存到数据库中的,但考虑到某些月份是无数据的,可用如下语句:
1、创建测试表及插入测试数据:
create table sale
(id int,
name varchar(10),
sdate datetime,
money int)
insert into sale values (1,'西瓜','2015-01-01',10)
insert into sale values (2,'香蕉','2015-01-05',20)
insert into sale values (3,'苹果','2015-02-01',60)
insert into sale values (4,'葡萄','2015-02-23',345)
insert into sale values (5,'柚子','2015-04-23',10)
insert into sale values (6,'牛奶','2015-05-12',67)
insert into sale values (7,'地瓜','2015-06-01',10)
insert into sale values (8,'薯仔','2015-07-01',10)
2、执行语句:
with t as
( select '2015-'+right('0'+cast(number+1 as varchar),2) number from master..spt_values where type='p' and number<=11 )
select t.number month,SUM(isnull(b.money,0)) money
from t left join sale b on
t.number=CONVERT(varchar(7),b.sdate,120)
group by t.number
结果截图:
B. SQL查询最近三个月的数据(查询最近几天,几
1、创建测试表,create table test_date2(id number, v_date date);
C. sql 求出连续三个月以上用户金额为0的数据
创建表,插入数据:
createtabletest
(年度varchar(4),
月份varchar(2),
识别号varchar(20),
店名称varchar(50),
金额int)
insertintotestvalues(2016,1,'23010219580302041301','哈尔滨中央大街金店',0)
insertintotestvalues(2016,2,'23010219580302041301','哈尔滨中央大街金店',0)
insertintotestvalues(2016,3,'2201041958080801','大庆市萨尔图区许驰比萨店',0)
insertintotestvalues(2016,3,'2201041958080801','哈尔滨市南岗区许驰比萨店',0)
insertintotestvalues(2016,3,'23010219580302041301','哈尔滨中央大街金店',0)
insertintotestvalues(2016,4,'2201041958080801','大庆市萨尔图区许驰比萨店',0)
insertintotestvalues(2016,4,'2201041958080801','哈尔滨市南岗区许驰比萨店',0)
insertintotestvalues(2016,4,'23010219580302041301','哈尔滨中央大街金店',0)
insertintotestvalues(2016,5,'2201041958080801','哈尔滨市南岗区许驰比萨店',0)
insertintotestvalues(2016,5,'23010219580302041301','哈尔滨中央大街金店',0)
insertintotestvalues(2016,6,'2201041958080801','哈尔滨市南岗区许驰比萨店',0)
insertintotestvalues(2016,6,'23010219580302041301','哈尔滨中央大街金店',0)
insertintotestvalues(2016,7,'23010219580302041301','哈尔滨中央大街金店',0)
insertintotestvalues(2016,9,'12232700556141546K','大兴安岭地区建设工程交易中心',0)
insertintotestvalues(2016,10,'2201041958080801','大庆市萨尔图区许驰比萨店',0)
insertintotestvalues(2016,10,'2201041958080801','哈尔滨市南岗区许驰比萨店',0)
insertintotestvalues(2016,10,'2201041958080801','绥化市北林区城市比萨绥化店',0)
insertintotestvalues(2016,10,'23010219580302041301','哈尔滨中央大街金店',0)
insertintotestvalues(2016,11,'12232700556141546K','大兴安岭地区建设工程交易中心',0)
insertintotestvalues(2016,12,'12232700556141546K','大兴安岭地区建设工程交易中心',0)
执行:
withtas
(select年度+right('0'+月份,2)+'01'日期,识别号,店名称,金额,row_number()over(partitionby店名称orderby年度+right('0'+月份,2)+'01')rnfromtestwhere金额=0)
selectsubstring(a.日期,1,4)年份,substring(a.日期,5,2)月份,a.识别号,a.店名称,a.金额fromta,
(selectt2.日期,t2.店名称fromtt1leftjointt2on
t1.店名称=t2.店名称anddatediff(mm,t2.日期,t1.日期)=1andt1.rn-t2.rn=1wheret2.日期isnotnull
union
selectt1.日期,t1.店名称fromtt1leftjointt2on
t1.店名称=t2.店名称anddatediff(mm,t2.日期,t1.日期)=1andt1.rn-t2.rn=1wheret2.日期isnotnull)b
wherea.日期=b.日期anda.店名称=b.店名称
anda.店名称in
(selecta.店名称fromta,
(selectt2.日期,t2.店名称fromtt1leftjointt2on
t1.店名称=t2.店名称anddatediff(mm,t2.日期,t1.日期)=1andt1.rn-t2.rn=1wheret2.日期isnotnull
union
selectt1.日期,t1.店名称fromtt1leftjointt2on
t1.店名称=t2.店名称anddatediff(mm,t2.日期,t1.日期)=1andt1.rn-t2.rn=1wheret2.日期isnotnull)b
wherea.日期=b.日期anda.店名称=b.店名称groupbya.店名称havingcount(*)>=3)
orderbya.店名称,a.日期
结果:
有可能是写麻烦了,先看看吧
D. SQL查询最近三个月的数据(查询最近几天,几年
1、SQL语句条件:“当前月” - “数据表中存储的月份” > 3
2、“当前月”:利用Oracle的内置时间函数
3、“数据表中存储的月份”:
(1)如果是单独一个字段存储的月份,直接访问该月份字段
(2)如果是使用一个字段存放的日期,需要利用内置的时间函数或字符串函数,对该字段进行解析,以提取出月份来
E. Sql查询连续月份的值
先 Group By 出来每个用户的登陆月份,使用 ROW_NUMBER() 函数给每个用户一个排序的序号。然后用用户的登陆月份与序号相减,如果月份连续,则相减后的数就是一样的。这样就能找到连续的月份了。
F. SQL语句统计每天、每月、每年的销售总额
一、SQL语句统计每年的销售总额
select year(ordertime) 年,
sum(Total) 销售合计
from 订单表
group by year(ordertime)
二、SQL语句统计每月的销售总额
select year(ordertime) 年,
month(ordertime) 月,
sum(Total) 销售合计
from 订单表
group by year(ordertime),
month(ordertime
三、SQL语句统计每日的销售总额
select year(ordertime) 年,
month(ordertime) 月,
day(ordertime) 日,
sum(Total) 销售合计
from 订单表
group by year(ordertime),
month(ordertime),
day(ordertime)
(6)sql查询连续三个月金额扩展阅读
mysql查询每天、每周、每月的数据方法
一、查询每天的数据
SELECT
COUNT(1) AS countNumber,
DATE_FORMAT(createTime,'%Y-%m-%d') AS dateTime
FROM
testTable
GROUP BY DATE_FORMAT(createTime,'%Y-%m-%d')
二、查询每周的数据
SELECT
COUNT(1) AS countNumber,
WEEK(createTime) as dateTime
FROM
testTable
GROUP BY WEEK(createTime)
三、查询每月的数据:
SELECT
COUNT(1) AS countNumber,
MONTH(createTime) as dateTime
FROM
testTable
GROUP BY MONTH(createTime)
G. SQL 筛选3个月连续消费增加的客户
with c_9 as
select clientid,sum(nvl(amount,0)) money from T where date >= to_date('20150901','yyyy-mm-dd') and t.date <= to_date('20150930','yyyy-mm-dd') group by clientid,
c_10 as select clientid,sum(nvl(amount,0)) money from T where date >= to_date('20151001','yyyy-mm-dd') and t.date <= to_date('20151031','yyyy-mm-dd') group by clientid,
c_11 as select clientid,sum(nvl(amount,0)) money from T where date >= to_date('20151101','yyyy-mm-dd') and t.date <= to_date('20151130','yyyy-mm-dd') group by clientid
select c_9.clientid,c_11.money - c_10.money as money 1,c_10.money - c_9.money as money 2
from c_9,c_10,c_11 where c_9.clientid = c_10.clientid and c_9.clientid = c_11.clientid
group by c_9.clientid having c_11.money - c_10.money > 0 and c_10.money - c_9.money > 0
H. 求助——SQL语句,目前已知每个id每月的交易额,怎么查询每个月每个id近半年的交易总额
关联取月份最近6个月的数据,按id,月份分组汇总交易额就可以了
跟1一样,就是按交易总额排序取前100
1.
select ao.id,ao.state_date,sum(ao.amount) amount from tab_order ao
left join tab_order so on so.id = ao.id and so.state_date between ao.state_date-5 and ao.state_date
group by ao.id,ao.state_date
2.
select * from
(select ao.id,ao.state_date,sum(ao.amount) amount from tab_order ao
left join tab_order so on so.id = ao.id and so.state_date between ao.state_date-3 and ao.state_date
group by ao.id,ao.state_date
order by amount desc
) limit 100
I. sql 查询 3个月内
DATEDIFF 函数 [日期和时间]格式:DATEDIFF ( date-part, date-expression-1, date-expression-2 );功能:
返回两个日期之间的间隔,即date-expression-2 减 date-expression-1的以date-part为单位的值。例子:SELECT datediff( month, '1999/07/19', '1999/08/23' );//返回 1
SELECT datediff( day, '1999/07/19 00:00', '1999/07/23 23:59' );//返回 4----------------------------------------------------------------------------------------------------修改:select * from OrderList where UserName='"&Session("UserName")&"' and datediff(Month,BuyTime,getdate(),Now) <=3"