相关疑难解决方法(0)

这两个查询是否相同 - GROUP BY与DISTINCT?

这两个查询似乎返回相同的结果.这是巧合还是真的一样?

1.

SELECT t.ItemNumber,
  (SELECT TOP 1 ItemDescription
   FROM Transactions
   WHERE ItemNumber = t.ItemNumber
   ORDER BY DateCreated DESC) AS ItemDescription
FROM Transactions t
GROUP BY t.ItemNumber
Run Code Online (Sandbox Code Playgroud)

2.

SELECT DISTINCT(t.ItemNumber),
  (SELECT TOP 1 ItemDescription
   FROM Transactions
   WHERE ItemNumber = t.ItemNumber
   ORDER BY DateCreated DESC) AS ItemDescription
FROM Transactions t
Run Code Online (Sandbox Code Playgroud)

一点解释:我正试图从一个充满交易的表中获得一个独特的项目列表.对于每个项目,我正在寻找ItemNumber(标识字段)和最新的ItemDescription.

sql sql-server group-by sql-server-2008

7
推荐指数
1
解决办法
829
查看次数

SQL难题,如何选择部件的最新日期,但每个部件只有1行(唯一)

我今天早上试图绕过这个.

我试图显示inventory部件的状态(对于我们的产品),如果我尝试返回所有部件,此查询将变得复杂.

让我说出来:

  • 单桌 inventoryReport
  • 我有一个我希望显示的X部分的明显列表,其结果必须是X#行(每个部分1行显示最新的库存条目).
  • 表由库存变更的LATEST日期条目组成(因此我只需要每个部分的日期条目).
  • 此单个表中包含的所有数据,因此不需要连接.

目前只有1个单一部分,它相当简单,我可以通过执行以下sql来实现这一点(为了给你一些想法):

SELECT     TOP (1) ldDate, ptProdLine, inPart, inSite, inAbc, ptUm, inQtyOh + inQtyNonet AS in_qty_oh, inQtyAvail, inQtyNonet, ldCustConsignQty, inSuppConsignQty
FROM         inventoryReport
WHERE     (ldPart = 'ABC123')
ORDER BY ldDate DESC
Run Code Online (Sandbox Code Playgroud)

这让我成为我的前1行,每个部分都很简单,但我需要显示所有X(比方说30个部分).所以我需要30行,结果如此.当然,简单的解决方案是在我的代码中循环X#的sql调用(但这会很昂贵)并且这就足够了,但为了这个目的,我希望更多地使用这个SQL来减少x#调用回db (如果不需要)只需1个查询.

从我在这里看到的,我需要在寻找我的结果集时以某种方式跟踪每个项目的最新日期.

我最终会做一个

WHERE ldPart in ('ABC123', 'BFD21', 'AA123', etc)
Run Code Online (Sandbox Code Playgroud)

限制我需要的部分.希望我的问题足够清楚.如果您有任何想法,请告诉我.我不能这样做,DISTINCT因为行不一样,日期需要是最新的,我需要最多X行.

思考?我被困了......

sql sql-server sql-server-2005 inventory

5
推荐指数
2
解决办法
1892
查看次数