一条sql语句怎样查询当前月份的数据,和上个月份的数据

放逐之刃--瑞文 2018-12-28 03:49:57
比如说,我这个月卖出去400件商品,上个月卖出500个,怎样用一条sql显示在一个表中啊,查询的条件是时间
...全文
5700 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_44336428 2018-12-30
  • 打赏
  • 举报
回复
学习学习
  • 打赏
  • 举报
回复
会查询“一个月”的销售总量就行了。
我姓区不姓区 2018-12-29
  • 打赏
  • 举报
回复
吉普赛的歌 2018-12-29
  • 打赏
  • 举报
回复
不明白你为什么给 #7 300分, 我 #10 才 50 分? #7容易理解, 但效率你没有想过。 你可以在大数量下测试, #7 的效率远远不是 #10 可以比的。 字段不能和函数混合, 混合在一起, 无用到索引, 效率低是肯定的。
  • 打赏
  • 举报
回复
查询两个数,其实也可以只写
select (子查询1) as 上月值, (子查询2) as 本月值
就可以了。
  • 打赏
  • 举报
回复
如果 只是需要当前月份及上个月的销售量, 那最简单的你写两个sql直接查出来就行了。当前月和当前月-1的数据量。
  • 打赏
  • 举报
回复

如果是两张表(每个月一张):union 拼起来查询即可

如果是一张表,那你要做的是统计功能?要把每个月的销售数量查出来,那么你百度一下 行转列,而行转列的源table应该是个临时表,
select count(1) from xxx group by 月份
吉普赛的歌 2018-12-29
  • 打赏
  • 举报
回复
USE tempdb
GO
IF OBJECT_ID('dbo.[t]') IS NOT NULL 
	DROP TABLE dbo.[t]
GO
CREATE TABLE dbo.[t](
[n] INT
,[d] DATETIME	
)
GO
SET NOCOUNT ON
INSERT INTO dbo.[t] VALUES(N'3',N'2018-6-20')
INSERT INTO dbo.[t] VALUES(N'1',N'2018-7-1')
INSERT INTO dbo.[t] VALUES(N'5',N'2018-7-31')
INSERT INTO dbo.[t] VALUES(N'4',N'2018-8-7')
INSERT INTO dbo.[t] VALUES(N'7',N'2018-8-17')
INSERT INTO dbo.[t] VALUES(N'8',N'2018-9-18')
---- 以上为测试表与测试数据 ----------

--创建索引提高效率,单独执行
CREATE INDEX ix_t_d ON t(d)

DECLARE @m VARCHAR(7)
SET @m ='201807'  --传入月份

--注意左边的 d 字段不要加任何包装,这样才能高效
SELECT 
 SUM(CASE WHEN d >= @m+'01' AND d< DATEADD(MONTH,1,@m+'01') THEN n ELSE 0 END) AS [当前月数量]
,SUM(CASE WHEN d >= DATEADD(MONTH,1,@m+'01') AND d< DATEADD(MONTH,2,@m+'01') THEN n ELSE 0 END) AS [下个月数量]
FROM t 
/*
当前月数量  下个月数量
----------- -----------
6           11
*/

gs0038 2018-12-29
  • 打赏
  • 举报
回复
大家看明白楼主的意思了吗?楼主是想统计当月销售情况与上个月的销售情况,还是查询当月的销售明细与上个月的销售明细的呢?

正怒月神 版主 2018-12-28
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
引用 2 楼 正怒月神 的回复:
select * from users
where regTime >= DATEADD(mm, DATEDIFF(mm,0,getdate())-1, 0)


我觉得可能是我没表达清楚,比如

数量:1 时间:2018-7-1
数量:5 时间:2018-7-31
数量:4 时间:2018-8-7
数量:7 时间:2018-8-17

带入时间去查,比如传入七月,

查出来的是数量要sum:
那么表的数据结构就是:

当前月份数量 下个月月份数量
6(就是5+1) 11(就是4+7)
pjjia 2018-12-28
  • 打赏
  • 举报
回复
declare @t table(
Name nvarchar(20),
SaleDate datetime,
SaleNum numeric(8,2)
)
insert into @t values ('A','2018-10-01 12:00:00',5)
insert into @t values ('B','2018-10-01 12:00:00',5)
insert into @t values ('C','2018-10-01 12:00:00',5)
insert into @t values ('A','2018-10-02 12:00:00',5)
insert into @t values ('B','2018-10-03 12:00:00',5)
insert into @t values ('B','2018-10-05 12:00:00',5)
insert into @t values ('A','2018-11-01 12:00:00',5)
insert into @t values ('B','2018-11-02 12:00:00',5)
insert into @t values ('B','2018-11-05 12:00:00',5)
insert into @t values ('C','2018-12-05 12:00:00',5)

select * from @t


select Name,CONVERT(char(7),SaleDate,120),SUM(SaleNum)
from @t
where SaleDate > DATEADD(MONTH,-1,DATEADD(DAY,-DAY(CONVERT(VARCHAR,'2018-11-20',23))+1,CONVERT(VARCHAR,'2018-11-20',23)))
and saleDate < DATEADD(MONTH,1,DATEADD(DAY,-DAY(CONVERT(VARCHAR,'2018-11-20',23))+1,CONVERT(VARCHAR,'2018-11-20',23)))
group by Name,CONVERT(char(7),SaleDate,120)
  • 打赏
  • 举报
回复

SELECT YEAR(adddate)年,MONTH(adddate) 月, SUM(sale) 数量
FROM test5
GROUP BY YEAR(adddate),MONTH(adddate)

正怒月神 版主 2018-12-28
  • 打赏
  • 举报
回复 1
select * from users where regTime >= DATEADD(mm, DATEDIFF(mm,0,getdate())-1, 0)
jiezhilaobiao 2018-12-28
  • 打赏
  • 举报
回复
SELECT * FROM 表名 WHERE 时间 >=DATEADD(MONTH,-1,DATEADD(DAY,-DAY(CONVERT(VARCHAR,GETDATE(),23))+1,CONVERT(VARCHAR,GETDATE(),23))) AND 时间 < DATEADD(MONTH,1,DATEADD(DAY,-DAY(CONVERT(VARCHAR,GETDATE(),23))+1,CONVERT(VARCHAR,GETDATE(),23)))

62,017

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧