Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 按最早日期排序的订单位置,不返回每个日期戳的记录_Sql Server_Tsql - Fatal编程技术网

Sql server 按最早日期排序的订单位置,不返回每个日期戳的记录

Sql server 按最早日期排序的订单位置,不返回每个日期戳的记录,sql-server,tsql,Sql Server,Tsql,我有一个子查询,需要返回每个机架和箱子的总和(数量),以最早的日期(ASC)订购机架/箱子。每次我使用date字段对数据进行排序时,它都会返回每个日期的记录。我在SELECT语句中添加了日期字段以供参考。我该怎么做呢 SELECT InventoryItems_1.ItemID, SUM(ISNULL(InventoryItems_1.QtyToStock, 0)) AS InvQty, InventoryItems_1.Rack, InventoryI

我有一个子查询,需要返回每个机架和箱子的总和(数量),以最早的日期(ASC)订购机架/箱子。每次我使用date字段对数据进行排序时,它都会返回每个日期的记录。我在SELECT语句中添加了日期字段以供参考。我该怎么做呢

SELECT InventoryItems_1.ItemID,
       SUM(ISNULL(InventoryItems_1.QtyToStock, 0)) AS InvQty,
       InventoryItems_1.Rack,
       InventoryItems_1.Bin,
       InventoryItems_1.LocationID,
       MIN(InventoryItems_1.Date),
       Locations_1.LocationCode,
       Locations_1.DescriptionMed
FROM dbo.InventoryItems AS InventoryItems_1
     INNER JOIN dbo.Locations AS Locations_1 ON InventoryItems_1.LocationID = Locations_1.LocationID
WHERE(InventoryItems_1.OwnerDetailID IS NULL)
GROUP BY InventoryItems_1.ItemID,
         InventoryItems_1.LocationID,
         InventoryItems_1.Rack,
         InventoryItems_1.Bin,
         InventoryItems_1.Date,
         Locations_1.LocationCode,
         Locations_1.DescriptionMed
HAVING InventoryItems_1.ItemID = 10308
ORDER BY InventoryItems_1.LocationID,
         InventoryItems_1.Date,
         InventoryItems_1.Rack,
         InventoryItems_1.Bin;
这是我的结果:

ID      Qty     Rack    Bin     Loc     Date                LocID
10308   35      21      02-Z    7   2018-10-22 14:48:33.000     WI  
10308   52.5    21      02-Z    7   2018-10-23 08:18:44.000     WI  
10308   87.5    18      01-Z    7   2018-10-23 12:19:09.000     WI  
10308   87.5    23      01-B    7   2018-10-24 11:02:35.000     WI  
10308   35      19      09-Z    7   2018-12-06 14:24:14.000     WI  
10308   22.5    19      09-Z    7   2018-12-06 16:52:26.000     WI  
10308   30      19      09-Z    7   2018-12-07 07:55:59.000     WI  
10308   55      19      09-Z    7   2018-12-07 08:54:55.000     WI  
10308   32.5    19      09-Z    7   2018-12-07 09:47:19.000     WI  
10308   87.5    19      03-C    7   2018-12-07 11:36:20.000     WI  
10308   72.5    19      10-Z    7   2018-12-07 13:17:03.000     WI  
10308   15      19      10-Z    7   2018-12-07 14:30:38.000     WI  
10308   32.5    18      07-A    7   2018-12-17 13:39:39.000     WI  
10308   12.5    19      03-A    7   2018-12-17 14:48:57.000     WI  
10308   42.5    19      03-A    7   2018-12-18 08:07:42.000     WI  
10308   87.5    19      11-Z    7   2018-12-18 10:11:23.000     WI  
10308   87.5    19      06-B    7   2018-12-18 12:08:17.000     WI  
10308   87.5    18      03-Z    7   2018-12-26 13:40:34.000     WI  
10308   55      21      05-Z    7   2018-12-26 14:48:58.000     WI  
10308   32.5    21      05-Z    7   2018-12-27 07:49:27.000     WI  
10308   87.5    19      01-B    7   2018-12-27 09:55:59.000     WI  
10308   8       18      07-A    7   2018-12-28 09:40:11.000     WI  
10308   0.5     18      08-B    7   2018-12-28 09:40:11.000     WI  
10308   75.5                    9   2018-11-27 11:55:17.000     NJ  
10308   7                       10  2018-10-24 08:28:26.000     TX  
10308   2.5                     10  2018-11-02 10:07:27.000     TX  
10308   12.5                    10  2018-11-02 14:36:57.000     TX  
10308   10.5                    10  2018-11-27 13:56:11.000     TX
这是我希望它看起来像排序最早的库存日期第一

ItemID  InvQty  Rack    Bin     Loc LocCode 
10308   87.5    18      01-Z    7   WI  
10308   87.5    18      03-Z    7   WI  
10308   40.5    18      07-A    7   WI  
10308   0.5     18      08-B    7   WI  
10308   87.5    19      01-B    7   WI  
10308   55      19      03-A    7   WI  
10308   87.5    19      03-C    7   WI  
10308   87.5    19      06-B    7   WI  
10308   175     19      09-Z    7   WI  
10308   87.5    19      10-Z    7   WI  
10308   87.5    19      11-Z    7   WI  
10308   87.5    21      02-Z    7   WI  
10308   87.5    21      05-Z    7   WI  
10308   87.5    23      01-B    7   WI  
10308   75.5                    9   NJ  
10308   32.5                    10  TX  

您通过
InventoryItems_1.Date
字段进行分组,这就是为什么每个日期都会出现单独的行。将查询更改为“不按此分组”,并命名“最小日期”字段将允许您生成正确的输出。另外,如果您想将报告限制为只有一个ID,请将其放在WHERE子句中,而不是HAVING子句中。这将在执行分组计算等操作之前过滤记录,从而加快输出速度

SELECT InventoryItems_1.ItemID,
       SUM(ISNULL(InventoryItems_1.QtyToStock, 0)) AS InvQty,
       InventoryItems_1.Rack,
       InventoryItems_1.Bin,
       InventoryItems_1.LocationID,
       MIN(InventoryItems_1.Date) As MinDate,
       Locations_1.LocationCode,
       Locations_1.DescriptionMed
FROM dbo.InventoryItems AS InventoryItems_1
INNER JOIN dbo.Locations AS Locations_1 
    ON InventoryItems_1.LocationID = Locations_1.LocationID
WHERE InventoryItems_1.OwnerDetailID IS NULL
    AND InventoryItems_1.ItemID = 10308

GROUP BY InventoryItems_1.ItemID,
         InventoryItems_1.LocationID,
         InventoryItems_1.Rack,
         InventoryItems_1.Bin,
         Locations_1.LocationCode,
         Locations_1.DescriptionMed
-- HAVING InventoryItems_1.ItemID = 10308
ORDER BY InventoryItems_1.LocationID,
         MIN(InventoryItems_1.Date),
         InventoryItems_1.Rack,
         InventoryItems_1.Bin;

您通过
InventoryItems_1.Date
字段进行分组,这就是为什么每个日期都会出现单独的行。将查询更改为“不按此分组”,并命名“最小日期”字段将允许您生成正确的输出。另外,如果您想将报告限制为只有一个ID,请将其放在WHERE子句中,而不是HAVING子句中。这将在执行分组计算等操作之前过滤记录,从而加快输出速度

SELECT InventoryItems_1.ItemID,
       SUM(ISNULL(InventoryItems_1.QtyToStock, 0)) AS InvQty,
       InventoryItems_1.Rack,
       InventoryItems_1.Bin,
       InventoryItems_1.LocationID,
       MIN(InventoryItems_1.Date) As MinDate,
       Locations_1.LocationCode,
       Locations_1.DescriptionMed
FROM dbo.InventoryItems AS InventoryItems_1
INNER JOIN dbo.Locations AS Locations_1 
    ON InventoryItems_1.LocationID = Locations_1.LocationID
WHERE InventoryItems_1.OwnerDetailID IS NULL
    AND InventoryItems_1.ItemID = 10308

GROUP BY InventoryItems_1.ItemID,
         InventoryItems_1.LocationID,
         InventoryItems_1.Rack,
         InventoryItems_1.Bin,
         Locations_1.LocationCode,
         Locations_1.DescriptionMed
-- HAVING InventoryItems_1.ItemID = 10308
ORDER BY InventoryItems_1.LocationID,
         MIN(InventoryItems_1.Date),
         InventoryItems_1.Rack,
         InventoryItems_1.Bin;

您可以这样做:

SELECT 
    InventoryItems_1.ItemID
,   ISNULL(InventoryItems_1.QtyToStock, 0) AS InvQty
,   InventoryItems_1.Rack
,   InventoryItems_1.Bin
,   InventoryItems_1.LocationID
,   InventoryItems_1.Date
,   Locations_1.LocationCode
,   Locations_1.DescriptionMed
FROM (
    SELECT *, ROW_NUMBER() OVER(PARTITION BY ItemID, Bin, LocationID ORDER BY [Date] DESC) RN 
    FROM dbo.InventoryItems 
) InventoryItems_1
INNER JOIN dbo.Locations AS Locations_1 ON InventoryItems_1.LocationID = Locations_1.LocationID
WHERE
    InventoryItems_1.RN = 1
AND InventoryItems_1.OwnerDetailID IS NULL
AND InventoryItems_1.ItemID = 10308
ORDER BY InventoryItems_1.LocationID,
         InventoryItems_1.Rack,
         InventoryItems_1.Bin;

您可以这样做:

SELECT 
    InventoryItems_1.ItemID
,   ISNULL(InventoryItems_1.QtyToStock, 0) AS InvQty
,   InventoryItems_1.Rack
,   InventoryItems_1.Bin
,   InventoryItems_1.LocationID
,   InventoryItems_1.Date
,   Locations_1.LocationCode
,   Locations_1.DescriptionMed
FROM (
    SELECT *, ROW_NUMBER() OVER(PARTITION BY ItemID, Bin, LocationID ORDER BY [Date] DESC) RN 
    FROM dbo.InventoryItems 
) InventoryItems_1
INNER JOIN dbo.Locations AS Locations_1 ON InventoryItems_1.LocationID = Locations_1.LocationID
WHERE
    InventoryItems_1.RN = 1
AND InventoryItems_1.OwnerDetailID IS NULL
AND InventoryItems_1.ItemID = 10308
ORDER BY InventoryItems_1.LocationID,
         InventoryItems_1.Rack,
         InventoryItems_1.Bin;

您不能按未返回的列排序——此外,在这里按日期排序而不显示,用户或查看此数据的任何人都无法理解。这里的目标是什么?我认为您可以通过子句@scsimon从分组中删除inventoryitems\u 1.Date:此查询是选择列表的一部分。我希望用户从顶部选择最旧的库存。否则,机架/箱的顺序是随机的。@pascal sanchez:如果字段的顺序是按,则必须在group by或AGGRATE函数中包含该字段。您应该在cte中使用ROW_编号,以便只选择每个组中的“第一个”字段。您不能按未返回的列进行排序--此外,用户或查看此数据的任何人都无法理解在此处按日期订购而不显示。这里的目标是什么?我认为您可以通过子句@scsimon从分组中删除inventoryitems\u 1.Date:此查询是选择列表的一部分。我希望用户从顶部选择最旧的库存。否则,机架/箱的顺序是随机的。@pascal sanchez:如果字段的顺序是由,则必须在group by或AGGRATE函数中包含该字段。您应该在cte中使用ROW_编号,以便只选择每个组中的“第一个”。是的,这很有效,谢谢!我现在明白我做错了什么!ItemID筛选器仅用于此示例,否则它将返回数千条记录。是的,这很有效,谢谢!我现在明白我做错了什么!ItemID筛选器仅用于此示例,否则它将返回数千条记录。