代码之家  ›  专栏  ›  技术社区  ›  spinjector

在SQL查询中,“TOP 1”是像MIN()或MAX()这样的聚合函数的可靠替代品吗。。?

  •  2
  • spinjector  · 技术社区  · 7 年前

    “TOP 1”是诸如MIN()和MAX()之类的聚合函数的可靠替代品吗。。?下面显示的是Access 2007中的一个基本查询,用于确定客户在某个月内首次订购某个产品的时间。DBMS系统可能与此无关,因为这个问题可能适用于任何系统。

    在此查询中,“TOP 1”与日期字段上的ORDER BY结合使用。这将返回一条记录,即按日期最旧的记录。但是……这样可以吗。。?会出什么问题。。?有更好的方法吗。。?

    SELECT TOP 1 DAACCT, DAITEM, DAQTY, DAIDAT
    
    FROM fqlOrdersGrandHistory
    
    WHERE DAACCT="T7414" AND DAITEM="45234" AND (DAIDAT>=20170501 AND DAIDAT<=20170531)
    
    ORDER BY DAIDAT;
    
    3 回复  |  直到 7 年前
        1
  •  2
  •   SandPiper    7 年前

    可靠是一个主观术语。对 TOP 1 MAX() MIN() 这取决于你在追求什么。

    前1名

    另一方面,如果您使用 SELECT DAACCT, MIN(DAIDAT) FROM table GROUP BY DAACCT 然后,您将获得每个用户最早的购买。这假设您正在存储 DAIDAT 作为带有时间组件的日期格式,而不仅仅是日期值本身。如果你这样做,你会打开自己的多个可能的记录。

    TL;DR:如果你坚持查询的概念1)为2)非常特定的产品寻找一个非常特定的用户,3)你的日期被存储为适当的日期,

        2
  •  1
  •   Rahul    7 年前

    TOP 用于限制提取的行,是的,除非您有多个具有相同数据的记录,否则没有问题。不确定它与 Min() Max() 最小() 最大() Group By group by 分组发生在整个结果集上

        3
  •  1
  •   Gustav    7 年前

    如果选定字段的一个字段或字段组合是唯一的,则可以。

    否则,结果集将包含字段或组合匹配的所有记录。为了避免这种情况,请始终在所选字段中包括(例如)自动编号字段。