按 sku 分组,最大日期 SQL
Group by sku, max date SQL
我知道这里有很多人问这个问题,我尝试使用其他示例将其合并到我自己的示例中,但我似乎无法做到这一点。
我有 sku、日期和成本的列,我想查看所有 3 列,但只能按最大日期,按 sku 分组。
目前:
Sku Date Cost
1 06/24/15 .01
1 02/22/14 .02
2 06/24/15 .04
2 02/22/14 .05
需要:
Sku Date Cost
1 06/24/15 .01
2 06/24/15 .04
这是我的 SQL 的样子:
SELECT dbo_SKU.PROD_CODE AS Sku, dbo_LOTS.REC_DATE AS [Last Date],
dbo_LOT_ITEM.COST AS Cost
FROM (dbo_LOTS INNER JOIN dbo_SKU ON dbo_LOTS.SKU_ID = dbo_SKU.SKU_ID)
INNER JOIN dbo_LOT_ITEM ON dbo_LOTS.LOT_ID = dbo_LOT_ITEM.LOT_ID;
这是设计视图的样子(我更喜欢视觉):
Design View
这是自学如何操作 Access 以及它如何工作的第 2 周,所以如果我们能用蜡笔来解释我如何使它正确工作,那就太好了。
您可以添加额外的逻辑来获取最后日期。一种方法是在 WHERE
子句中添加相关子查询:
SELECT s.PROD_CODE AS Sku, l.REC_DATE AS [Last Date], li.COST AS Cost
FROM (dbo_LOTS as l INNER JOIN
dbo_SKU as si
ON l.SKU_ID = s.SKU_ID
) INNER JOIN
dbo_LOT_ITEM as li
ON l.LOT_ID = li.LOT_ID
WHERE l.REC_DATE = (SELECT MAX(l2.REC_DATE)
FROM dbo_LOTS as l2
WHERE l2.SKU_ID = l.SKU_ID
);
这有效:
SELECT dbo_SKU.PROD_CODE AS Sku, dbo_LOTS.REC_DATE AS [Last Date], dbo_LOTS.COSTPERSKU AS Cost
FROM dbo_LOTS INNER JOIN dbo_SKU ON dbo_LOTS.SKU_ID = dbo_SKU.SKU_ID
WHERE (((dbo_LOTS.REC_DATE)=(SELECT MAX(l2.REC_DATE)
FROM dbo_LOTS as l2 WHERE l2.SKU_ID = dbo_LOTS.SKU_ID)));
我知道这里有很多人问这个问题,我尝试使用其他示例将其合并到我自己的示例中,但我似乎无法做到这一点。
我有 sku、日期和成本的列,我想查看所有 3 列,但只能按最大日期,按 sku 分组。 目前:
Sku Date Cost
1 06/24/15 .01
1 02/22/14 .02
2 06/24/15 .04
2 02/22/14 .05
需要:
Sku Date Cost
1 06/24/15 .01
2 06/24/15 .04
这是我的 SQL 的样子:
SELECT dbo_SKU.PROD_CODE AS Sku, dbo_LOTS.REC_DATE AS [Last Date],
dbo_LOT_ITEM.COST AS Cost
FROM (dbo_LOTS INNER JOIN dbo_SKU ON dbo_LOTS.SKU_ID = dbo_SKU.SKU_ID)
INNER JOIN dbo_LOT_ITEM ON dbo_LOTS.LOT_ID = dbo_LOT_ITEM.LOT_ID;
这是设计视图的样子(我更喜欢视觉): Design View
这是自学如何操作 Access 以及它如何工作的第 2 周,所以如果我们能用蜡笔来解释我如何使它正确工作,那就太好了。
您可以添加额外的逻辑来获取最后日期。一种方法是在 WHERE
子句中添加相关子查询:
SELECT s.PROD_CODE AS Sku, l.REC_DATE AS [Last Date], li.COST AS Cost
FROM (dbo_LOTS as l INNER JOIN
dbo_SKU as si
ON l.SKU_ID = s.SKU_ID
) INNER JOIN
dbo_LOT_ITEM as li
ON l.LOT_ID = li.LOT_ID
WHERE l.REC_DATE = (SELECT MAX(l2.REC_DATE)
FROM dbo_LOTS as l2
WHERE l2.SKU_ID = l.SKU_ID
);
这有效:
SELECT dbo_SKU.PROD_CODE AS Sku, dbo_LOTS.REC_DATE AS [Last Date], dbo_LOTS.COSTPERSKU AS Cost
FROM dbo_LOTS INNER JOIN dbo_SKU ON dbo_LOTS.SKU_ID = dbo_SKU.SKU_ID
WHERE (((dbo_LOTS.REC_DATE)=(SELECT MAX(l2.REC_DATE)
FROM dbo_LOTS as l2 WHERE l2.SKU_ID = dbo_LOTS.SKU_ID)));