【发布时间】:2017-04-07 10:31:17
【问题描述】:
在 SQL Server 中有这两个表:
购物车:
id userid prodid qt date
1 21 P1 1 2017-02-18
2 21 P8 1 2017-02-19
3 21 P2 1 2017-02-20
4 22 P5 1 2017-02-21
5 22 P3 1 2017-02-22
6 23 P4 1 2017-02-23
用户:
id user_name
21 John
22 James
23 Alice
24 Lily
我想要一个表,其中仅显示具有最新日期的 文章,按 user_id 分组,有 1 列 (art_c),其中包含每个用户添加到购物车的文章数(不是 Qt,即数量),并加入了 Users 表。 另外,我想为每一行结果添加分页。
我想要的结果是这样的:
id userid user_name prodid art_c date
3 21 John P2 3 2017-02-20
5 22 James P3 2 2017-02-22
6 23 Alice P4 1 2017-02-23
最好/最快的方法是什么? 我正在使用这个请求,但我不确定它是否是好/快的方法:
With tb_a as
(
SELECT u_id,u_name,dat,art_c,ROW_NUMBER() OVER (ORDER BY u_name) as rgw FROM
shopcart a
LEFT JOIN
(SELECT
a.userid as u_id,
b.user_name as u_name,
Format(shop_date, 'dd.MM.yyyy HH:mm') as dat,
RANK() OVER (PARTITION BY a.userid ORDER BY shop_date DESC) as dest_rank,
Count(a.id) OVER (PARTITION BY a.userid ORDER BY shop_date) as art_c
FROM
shopcart a
LEFT JOIN
Users b on a.userid=b.id
group by
a.userid,b.name,shop_date,a.id) b on a.userid=b.u_id
where dest_rank = 1
group by u_id,u_name,dat,art_c
)
SELECT * FROM tb_a
WHERE rgw BETWEEN 0 AND 100 order by rgw
【问题讨论】:
-
如果担心速度,建议不要使用
FORMAT()sqlperformance.com/2015/06/t-sql-queries/… -
一个用户有两个最新日期相同的产品怎么办?
-
@ThorstenKettner 这只是一个例子,在数据库中我有精确到毫秒的日期时间
-
@mendosi 谢谢,我不知道
FORMAT()
标签: sql sql-server database tsql group-by