1.创建表结构和数据

创建表和数据

Create Table Product --产品表
(
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() 进行排位分组

Select T.OrderID, P.ProductName, T.Quantity, T.Amount, T.OrderDateTime
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

Select T.OrderID, P.ProductName, T.Quantity, T.Amount, T.OrderDateTime
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 条记录相关推荐

  1. 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 ...

  2. 160804、oracle查询:取出每组中的第一条记录

    oracle查询:取出每组中的第一条记录 按type字段分组,code排序,取出每组中的第一条记录 方法一: select type,min(code) from group_info  group ...

  3. oracle查询:分组查询,取出每组中的第一条记录

    按type字段分组,code排序,取出每组中的第一条记录 方法一: select type,min(code) from group_info  group by type; 注意:select 后面 ...

  4. oracle分组查询取第一条数据,160804、oracle查询:取出每组中的第一条记录

    oracle查询:取出每组中的第一条记录 按type字段分组,code排序,取出每组中的第一条记录 方法一: select type,min(code) from group_info group b ...

  5. SQL 如何返回最大值所在的多条记录

    SQL 中通过 top 或 limit 子句得到第一条数据不难,再配合排序,就能得到最大的那一行: select top 1 * from T order by f desc 如果最大值有多条记录,想 ...

  6. SQL实现分组查询取前几条记录

    我要实现的功能是统计订单日志表中每一个订单的前三条日志记录,表结构如下: 一个订单在定点杆日志表中有多条记录,要根据时间查询出每一个订单的前三条日志记录,sql如下: select b.OrderNu ...

  7. mysql 分组top_MySQL:如何查询出每个分组中的 top n 条记录?

    问题描述 需求: 查询出每月 order_amount(订单金额) 排行前3的记录. 例如对于2019-02,查询结果中就应该是这3条: 解决方法 MySQL 5.7 和 MySQL 8.0 有不同的 ...

  8. 查询出每个分组中的 top n 条记录

    问题描述 需求: 查询出每月 order_amount(订单金额) 排行前3的记录. 例如对于2019-02,查询结果中就应该是这3条: 解决方法 MySQL 5.7 和 MySQL 8.0 有不同的 ...

  9. mysql批量删除多条记录的sql语句_一次删除多条记录的sql语句

    在sql中要一次性删除多条记录我想到二种方法,一种是利用sql in一种是利用循环一条条删除,下面我们主要讲关于sql in 在sql中要一次性删除多条记录我想到二种方法,一种是利用sql in一种是 ...

最新文章

  1. Linux必学的网络操作命令
  2. Python+Selenium自动化
  3. openfiler 搭建虚拟存储 并 配置服务端 (转载)
  4. 【例题 6-6 UVA - 679】Dropping Balls
  5. 国内初创企业选择云计算服务器价格对比
  6. 1. ThreadPoolExecutor的一个常用的构造方法
  7. python 读取文件时报错UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 205: illegal multib
  8. java 进度条_进度条Java
  9. 关于解决service 'sapdp00' not found的办法
  10. 瑞幸咖啡上半年营收31.8亿元 同比增长106%
  11. Hibernate关联关系映射之一对一关联关系
  12. git commit或pull后恢复到原来版本
  13. 反转链表与链表实现两数相加(简单思路)
  14. C语言如何制作dIL文件,C语言学习笔记———指针
  15. 脚本小子福利:安卓远控木马直接生成
  16. 【极客】神器——常用的一些小工具
  17. 劳务派遣人员是否有加班费
  18. 韦东山freeRTOS系列教程之【第二章】内存管理
  19. 简单的CSV文件读取,C语言实现
  20. 【数学建模】基于matlab模拟疫情SEIRS模型【含Matlab源码 2214期】

热门文章

  1. c语言求n以内的素数的个数,关于求N以内素数的一点小问题(N小于一亿)
  2. mysql的grant权限
  3. c语言入门至精通(全集),C语言入门至精通(全集)知识讲解.ppt
  4. snort3安装教程
  5. leetcode算法题--和为s的连续正数序列
  6. leetcode算法题--最接近的三数之和
  7. leetcode算法题--分割等和子集★
  8. mysql场景测试_【干货】不同场景下 如何进行MySQL迁移
  9. qt-designer使用教程1--HelloWorld
  10. 无限容量数据库架构设计