34,576
社区成员
发帖
与我相关
我的任务
分享
--sql2005以上版本可以使用
;WITH cte AS (
SELECT *,ROW_NUMBER() OVER(PARTITION BY 用户号,CAST(时间 as date) order by 时间) as rn
FROM 表名称 --这里的表名称替换成你的表名称
)
SELECT 用户名,CAST(时间 as date) as 时间,count(单号) as 总单号数,sum(金额) as 总金额
FROM cte
WHERE rn<=50
GROUP BY 用户名,CAST(时间 as date)
--sql2005以上版本可以使用
;WITH cte AS (
SELECT *,ROW_NUMBER() OVER(PARTITION BY 用户号,CAST(时间 as date) order by 时间) as rn
FROM 表名称 --这里的表名称替换成你的表名称
)
SELECT 用户名,CAST(时间 as date) as 时间,count(单号) as 总单号数,sum(金额) as 总金额
FROM cte
WHERE rn<=50 AND 金额>10
GROUP BY 用户名,CAST(时间 as date)
USE tempdb
GO
IF OBJECT_ID('t') IS NOT NULL DROP TABLE t
GO
CREATE TABLE t(用户号 int,单号 INT,时间 DATETIME, 金额 int)
INSERT INTO t VALUES (1,1,'2018-01-21 08:00',11)
INSERT INTO t VALUES (1,2,'2018-01-21 09:00',12)
INSERT INTO t VALUES (1,3,'2018-01-21 10:00',20)
INSERT INTO t VALUES (2,4,'2018-01-21 11:00',3)
INSERT INTO t VALUES (2,5,'2018-01-21 12:00',15)
INSERT INTO t VALUES (2,6,'2018-01-21 13:00',5)
INSERT INTO t VALUES (3,7,'2018-01-22 08:00',30)
;WITH cte AS (
SELECT ROW_NUMBER() OVER (PARTITION BY 用户号,convert(CHAR(10),时间,120) order by 时间 desc) as rid
,*
FROM t
WHERE 金额>10
)
SELECT
用户号
,convert(CHAR(10),时间,120) as 时间
,COUNT(1) AS 笔数
,SUM(金额) AS 金额
FROM cte
WHERE rid<=50
GROUP BY 用户号,convert(CHAR(10),时间,120)
/*
用户号 时间 笔数 金额
1 2018-01-21 3 43
2 2018-01-21 1 15
3 2018-01-22 1 30
*/
SELECT * FROM (
select 用户号,单号,时间,金额,
ROW_NUMBER() OVER(PARTITION BY 用户号,单据日期,Order by 时间) AS NO
From 表) AS A
WHERE A.NO<=50