从列表中获得前10名

时间:2013-01-08 10:01:15

标签: c# asp.net sql list loops

嗨,我有一个问题,获得前10名的产品。

场景是:我有包含productid和date的产品表。我有方法通过Id获取产品并循环它,但不知道如何获得当时列出的最频繁的产品。

我需要从一个范围的日期获得十大产品。

基本上我有产品清单及其产品FK

的订单和库存清单

我从每个订单中获得产品FK,并获得所有订单中最常见的十大产品。

4 个答案:

答案 0 :(得分:0)

我猜测你的标签是基于你使用SQL数据库,并且你的问题是你多次列出同一个产品...如果是这样的话,你可以这样做:

Select * From "table" Group By "product" order by count(*) limit 10

答案 1 :(得分:0)

正如你在sql和asp.net中标记的那样,它应该是一个sql server db,

您可以从产品表中获取 TOP 10 product_id,这两个日期 BETWEEN 如果您输入日期作为varchar或文本,您将需要将其转换为日期时间格式),然后按日期降序顺序对它们进行排序,这样就可以为您提供十种最新产品。

这是一个示例代码。

SELECT TOP 5 Product_ID FROM Product where Product.Dates between (SELECT convert(datetime, '2012-04-17 14:42:06.273', 120)) and (SELECT convert(datetime, '2012-04-19 10:39:08.477', 120)) order by Product.Dates desc

答案 2 :(得分:0)

您只需通过创建存储过程并调用表格来选择产品列表。

在存储过程中,您可以使用选择产品列表 ORDER BY

子句 例如。

SELECT * FROM PRODUCT_TABLE ORDER BY DATE_COLUMN

由于

答案 3 :(得分:0)

这可能会有所帮助。您可以按日期对两个查询进行分区:

-- Top n-paid in all Depts:
SELECT * FROM 
 ( SELECT deptno, ename, sal
    , ROW_NUMBER() OVER (order by sal desc, ename) as row_num
    --, RANK () OVER (PARTITION BY deptno ORDER BY sal desc) ranks
    --, DENSE_RANK () OVER (PARTITION BY deptno ORDER BY sal desc) d_ranks
   FROM scott.emp )
WHERE row_num  <= 10 -- TOP 10 in all depts --

-- Between rows --
SELECT * FROM 
   ( SELECT deptno, ename, sal, ROW_NUMBER() OVER (ORDER BY ename) Row_Num FROM scott.emp)
  WHERE Row_Num BETWEEN 5 and 10