如何用sql语句求峰值

alvamar 2018-01-25 05:05:17
有个表结构如下:

客户 起始日 到期日 交易量
A 2017-6-12 2017-8-13 30
A 2017-7-5 2017-12-12 100
B 2017-7-7 2018-1-3 50
A 2017-8-5 2018-8-5 70

如何能用sql语句求出2017年A客户未到期交易量的峰值200,最好还能有达到峰值时的日期,谢谢各位。
...全文
1887 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 2018-01-26
  • 打赏
  • 举报
回复
access 不会,10多年前用过,它的sql弱
alvamar 2018-01-26
  • 打赏
  • 举报
回复
非常感谢,如果要在access中实现,语句该如何写
引用 2 楼 zjcxc 的回复:
DECLARE @t TABLE( 客户 varchar(10), 起始日 date, 到期日 date, 交易量 int);
INSERT @t VALUES
('A', '2017-6-12', '2017-08-13', 30),
('A', '2017-7-05', '2017-12-12', 100),
('B', '2017-7-07', '2018-01-03', 50),
('A', '2017-8-05', '2018-08-05', 70);

SELECT * FROM(
	SELECT *, ROW_NUMBER()OVER(PARTITION BY RQ.客户 ORDER BY S.v DESC, RQ.日期) as _r
	FROM(
		SELECT 客户, 起始日 as 日期 FROM @t
		UNION
		SELECT 客户, 到期日 as 日期 FROM @t
	) RQ
		CROSS APPLY(
			SELECT SUM(交易量) FROM @t DATA
			WHERE DATA.客户 = RQ.客户
				AND RQ.日期 BETWEEN DATA.起始日 AND DATA.到期日
		) S(v)
	WHERE RQ.日期 >= '2017-1-1' AND RQ.日期 < '2018-1-1'
) RE WHERE _r = 1
zjcxc 2018-01-25
  • 打赏
  • 举报
回复
DECLARE @t TABLE( 客户 varchar(10), 起始日 date, 到期日 date, 交易量 int);
INSERT @t VALUES
('A', '2017-6-12', '2017-08-13', 30),
('A', '2017-7-05', '2017-12-12', 100),
('B', '2017-7-07', '2018-01-03', 50),
('A', '2017-8-05', '2018-08-05', 70);

SELECT * FROM(
	SELECT *, ROW_NUMBER()OVER(PARTITION BY RQ.客户 ORDER BY S.v DESC, RQ.日期) as _r
	FROM(
		SELECT 客户, 起始日 as 日期 FROM @t
		UNION
		SELECT 客户, 到期日 as 日期 FROM @t
	) RQ
		CROSS APPLY(
			SELECT SUM(交易量) FROM @t DATA
			WHERE DATA.客户 = RQ.客户
				AND RQ.日期 BETWEEN DATA.起始日 AND DATA.到期日
		) S(v)
	WHERE RQ.日期 >= '2017-1-1' AND RQ.日期 < '2018-1-1'
) RE WHERE _r = 1
shoppo0505 2018-01-25
  • 打赏
  • 举报
回复
这个要化成每天客户拥有的交易量,然后再求和。 根据你现在的数据结构,我真想不到什么好办法,看看其他大神的回复吧。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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