我需要从第一个实例返回所有字段 - SQL

Posted

技术标签:

【中文标题】我需要从第一个实例返回所有字段 - SQL【英文标题】:I need to return all fields from the first instance - SQL 【发布时间】:2013-09-25 10:59:37 【问题描述】:

我正在尝试从销售订单表中某个项目的第一个实例中检索所有字段。

项目 订单日期 订单数量 项目 1 17/09/2013 1 项目 1 2013 年 9 月 20 日 2 项目 2 2013 年 9 月 16 日 2 项目 2 2013 年 9 月 17 日 1 项目 3 20/09/2013 3 项目 3 2013 年 9 月 20 日 2 项目 3 20/09/2013 1

粗体的记录是我所追求的。我的暂存表已经按订单日期(以及稍后的订单数量)排序。

Select DISTINCTSelect GROUP 不适合,因为我需要返回所有字段(还有更多未显示)并且我不想要总订单数量。

非常感谢您的帮助。

【问题讨论】:

【参考方案1】:

这是一个使用FIRST 函数的例子。

select item,
      min(orderdate) keep(dense_rank first order by orderdate, orderqty desc),
      min(orderqty) keep(dense_rank first order by orderdate, orderqty desc)
from items
group by item;

示例here。

【讨论】:

我应该在我的示例表上显示其他字段,例如订单类型和订单编号。有没有办法将这些字段合并到您的查询中而不会出现 NOT A GROUP BY EXPRESSION 错误?【参考方案2】:

如果您想在没有任何顺序的情况下首次出现,请使用以下内容。但是如果你想根据日期和数量来订购,请在 row_number 函数的 order by class 中添加。

 Select Item, Order_Date, Order_Qty from 
(select Item, Order_Date, Order_Qty, 
row_number() over(partition by Item order by null) rn
from table1) a where rn = 1;

【讨论】:

【参考方案3】:
select t.*
from your_table t
inner join
(
   select x.Item, min(x."Order Date") as mod
   from 
   (
      select Item, "Order Date", max("Order Qty")
      from your_table
      group by Item, "Order Date"
   ) x
   group by x.Item       
) y on y.item = t.item and y.mod = t."Order Date"

【讨论】:

您好,感谢您的及时答复。我会试试这个。但是,我实际上是在最旧的订单之后,如果在最旧的订单当天有多个订单,我只会关心订单数量(需要最大的订单)。我希望这可以澄清。 你好。我试过了,但它给了我最早一天的所有订单。然而,它确实剥夺了以后几天的所有订单。我想我将不得不再次执行上述操作,这次使用 max (orderqty)。 我进行了第二次内部连接,但我在同一天收到了相同订单数量的订单,因此我仍然会收到一些商品的多条记录。

以上是关于我需要从第一个实例返回所有字段 - SQL的主要内容,如果未能解决你的问题,请参考以下文章

SQL Join 三表;表 1 中的返回值,其中表 2 中的所有实例具有相同的字段值

从第一个或最后一个删除字符

SQL:查询数据库中所有表的字段,并在查询结果中返回表、字段、字段描述

有没有办法在不写查询中所有字段名称的情况下选择第一个表?

通过一次提交发送双表单,同时将电子邮件字段从第一个表单拉到第二个表单

Oracle SQL 性能问题 - 如何使查询停止运行并在找到第一个实例时返回