SQL取出每个产品的Top n 条记录
1.创建表结构和数据
(
ProductID Int Identity(1,1) Primary key, --产品ID
ProductName NVarchar(100) Not Null, --产品名称
ProductPrice Int Not Null--价格
)
GO
Create Table ProductOrder --产品订单
(
OrderID Int Identity(1000,1) Primary key,
ProductID Int,
Quantity Int,--数量
amount Int,--金额
OrderDateTime DateTime Not Null --下单时间
)
Alter Table ProductOrder
Add Constraint FK_ProductOrder_ProductID Foreign Key(ProductID)
References Product(ProductID)
GO
Insert Into Product
Values('黄金',389.8)
Insert Into Product
Values('白银',8.9)
Insert Into ProductOrder
Values(1,10,3890,GetDate())
Insert Into ProductOrder
Values(2,1000,8900,GetDate())
Insert Into ProductOrder
Values(1,150,389.8*150,'2012-12-21')
Insert Into ProductOrder
Values(1,60000,388*60000,'2011-10-1')
Insert Into ProductOrder
Values(2,10000,88950,GetDate())
Insert Into ProductOrder
Values(2,1000,8850,GetDate())
Insert Into ProductOrder
Values(2,4000,32850,GetDate())
Select * from Product
Select * from ProductOrder
2.取出每个产品的前2条记录
2.1 使用ROW_NUMBER() 进行排位分组
From Product P
Left Join
(
Select Row_Number() over(Partition By ProductID Order by OrderDateTime Desc) As RowID,
OrderID, ProductID,Quantity, Amount,OrderDateTime
From ProductOrder
) T On T.ProductID = P.ProductID
Where T.RowID<3
2.2 使用Cross Apply
From Product P
Cross Apply
(
Select Top 2 * from ProductOrder O Where O.ProductID = P.ProductID
Order By OrderDateTime Desc
) As T
转载于:https://www.cnblogs.com/chinabc/archive/2011/03/11/1980632.html
SQL取出每个产品的Top n 条记录相关推荐
- SQL Server 2000查询n到m条记录
SQL Server 2000查询n到m条记录? (1)select top m * from tablename where id not in (select top n id from tabl ...
- 160804、oracle查询:取出每组中的第一条记录
oracle查询:取出每组中的第一条记录 按type字段分组,code排序,取出每组中的第一条记录 方法一: select type,min(code) from group_info group ...
- oracle查询:分组查询,取出每组中的第一条记录
按type字段分组,code排序,取出每组中的第一条记录 方法一: select type,min(code) from group_info group by type; 注意:select 后面 ...
- oracle分组查询取第一条数据,160804、oracle查询:取出每组中的第一条记录
oracle查询:取出每组中的第一条记录 按type字段分组,code排序,取出每组中的第一条记录 方法一: select type,min(code) from group_info group b ...
- SQL 如何返回最大值所在的多条记录
SQL 中通过 top 或 limit 子句得到第一条数据不难,再配合排序,就能得到最大的那一行: select top 1 * from T order by f desc 如果最大值有多条记录,想 ...
- SQL实现分组查询取前几条记录
我要实现的功能是统计订单日志表中每一个订单的前三条日志记录,表结构如下: 一个订单在定点杆日志表中有多条记录,要根据时间查询出每一个订单的前三条日志记录,sql如下: select b.OrderNu ...
- mysql 分组top_MySQL:如何查询出每个分组中的 top n 条记录?
问题描述 需求: 查询出每月 order_amount(订单金额) 排行前3的记录. 例如对于2019-02,查询结果中就应该是这3条: 解决方法 MySQL 5.7 和 MySQL 8.0 有不同的 ...
- 查询出每个分组中的 top n 条记录
问题描述 需求: 查询出每月 order_amount(订单金额) 排行前3的记录. 例如对于2019-02,查询结果中就应该是这3条: 解决方法 MySQL 5.7 和 MySQL 8.0 有不同的 ...
- mysql批量删除多条记录的sql语句_一次删除多条记录的sql语句
在sql中要一次性删除多条记录我想到二种方法,一种是利用sql in一种是利用循环一条条删除,下面我们主要讲关于sql in 在sql中要一次性删除多条记录我想到二种方法,一种是利用sql in一种是 ...
最新文章
- Linux必学的网络操作命令
- Python+Selenium自动化
- openfiler 搭建虚拟存储 并 配置服务端 (转载)
- 【例题 6-6 UVA - 679】Dropping Balls
- 国内初创企业选择云计算服务器价格对比
- 1. ThreadPoolExecutor的一个常用的构造方法
- python 读取文件时报错UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 205: illegal multib
- java 进度条_进度条Java
- 关于解决service 'sapdp00' not found的办法
- 瑞幸咖啡上半年营收31.8亿元 同比增长106%
- Hibernate关联关系映射之一对一关联关系
- git commit或pull后恢复到原来版本
- 反转链表与链表实现两数相加(简单思路)
- C语言如何制作dIL文件,C语言学习笔记———指针
- 脚本小子福利:安卓远控木马直接生成
- 【极客】神器——常用的一些小工具
- 劳务派遣人员是否有加班费
- 韦东山freeRTOS系列教程之【第二章】内存管理
- 简单的CSV文件读取,C语言实现
- 【数学建模】基于matlab模拟疫情SEIRS模型【含Matlab源码 2214期】