我在同一个数据库中有两个表; tableA具有我需要的date
,而tableB具有cost
。这些表类似于更改日期和费用的存档,因此单个项目会重复多次,但我只想要最近的date
和最低cost
。
数据示例:
TABLEA
LocalSKU: aaa-aaa1 date: 12/1/1
LocalSKU: aaa-aaa1 date: 11/1/3
LocalSKU: aaa-aaa1 date: 10/2/1
tableB的
SKU: aaa-aaa1 cost: 0.15
SKU: aaa-aaa1 cost: 5
SKU: aaa-aaa1 cost: 0
期望的结果:
SKU: aaa-aaa1 date: 12/1/1 cost: 0
我尝试过一个简单的查询来使用此查询撤回单个结果:
SELECT MAX(date)
FROM tableA
WHERE LocalSKU = (SELECT MIN(cost)
FROM tableB
WHERE SKU = tableB.LocalSKU GROUP BY SKU);
产生了0个结果。
我不熟悉subquerying和join,是否有一个查询可以获得所需的结果?我能够在单独的查询中获得我想要的信息,但是我试图合并数组以组合所需的信息。
非常感谢帮助!
答案 0 :(得分:0)
加入表并在结果上使用聚合函数。
SELECT a.localsku, MIN(cost), MAX(date)
FROM tableA
JOIN tableB ON a.localsku = b.sku
GROUP BY a.localsku
实际上,首先进行分组然后加入子查询可能会更高效,因为加入大表是很昂贵的。
SELECT a.localsku, a.date, b.cost
FROM (
SELECT localsku, MAX(date) AS date
FROM tableA
GROUP BY localsku) AS a
JOIN (
SELECT sku, MIN(cost) as cost
FROM tableB
GROUP BY sku) AS b
ON a.localsku = b.sku