我需要从第一个实例返回所有字段 - 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 DISTINCT
和Select 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:查询数据库中所有表的字段,并在查询结果中返回表、字段、字段描述