【问题标题】:Getting Top 10 From list [closed]从列表中获得前 10 名 [关闭]
【发布时间】:2012-12-22 03:41:49
【问题描述】:

您好,我在获取前 10 名产品时遇到了问题。

场景是:我有包含 productid 和 date 的产品表。我有方法通过 Id 获取产品并循环它,但不知道如何获取最常见的产品。

我需要从一个范围日期获得前 10 种产品。

基本上我有带有库存的产品列表和带有产品 FK 的订单列表

我从每个订单中获取产品FK,并从所有订单中获取最频繁的前十名产品。

【问题讨论】:

  • 请提供一些代码
  • 请提供您用于获取数据的代码以及您遇到问题的位置。
  • 表的结构是什么?你用什么逻辑来找出“最常见的产品”?
  • 您需要在 SQL 中还是在 C#/Linq 中解决这个问题?
  • 不要循环,这不是数据库的用途。它比基于集合的操作要慢得多。

标签: c# asp.net sql list loops


【解决方案1】:

您可以通过创建存储过程并调用您的表来简单地选择您的产品列表。

在存储过程中,您可以使用 ORDER BY

条款 例如。

SELECT * FROM PRODUCT_TABLE ORDER BY DATE_COLUMN

谢谢

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      正如您在 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
      

      【讨论】:

        【解决方案4】:

        我根据我们的标签猜测您使用 SQL 数据库,并且根据您多次列出相同产品的问题...如果是这种情况,您可以执行以下操作:

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

        【讨论】:

          猜你喜欢
          • 2021-10-10
          • 1970-01-01
          • 1970-01-01
          • 2014-05-05
          • 1970-01-01
          • 1970-01-01
          • 2016-05-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多