我正在尝试从数据库中提取信息,该数据库由另一个来源输入数据。事情的方式,每次这个源更新有关产品的信息,而不是做更新...它只是做一个插入。所以你在那里有很多重复的信息,所以查询如下:
SELECT
product_data.ProductUPC,
product_data.NAME,
product_data.Shelf,
product_data.Create_Time,
--Supplier--
Supplier = CASE supplier_data.Supplier_Code
WHEN '01' THEN 'BlueBerries'
WHEN '02' THEN 'Grey'
WHEN '03' THEN 'Coco'
ELSE 'OTHER'
END
--JOINS--
FROM
product_data
INNER JOIN
supplier_data ON supplier_data.ProductID = product_data.ProductID
WHERE
product_data.ProductUPC IS NOT NULL
返回类似的内容:
ProductUPC Product Name Shelf Supplier Create_Time
12345 Cookie Cutter NULL NULL 2015-01-06 16:11:00.667
12345 Cookie Cutter NULL BlueBerries 2015-01-22 16:11:00.667
12345 Cookie Cutter 12 BlueBerries 2015-03-06 16:11:00.667
00040 NULL NULL NULL 2015-01-06 16:11:00.667
00040 Water Hose NULL Grey 2015-01-22 16:11:00.667
00040 Water Hose 11 Grey 2015-03-06 16:11:00.667
我只想拉每个productUPC 的信息最多的行,这通常是具有最新“Create_Time”的行,该列位于数据库的所有表中。 所以我想要这样的回报:
ProductUPC Product Name Shelf Supplier Create_Time
12345 Cookie Cutter 12 BlueBerries 2015-03-06 16:11:00.667
00040 Water Hose 11 Grey 2015-03-06 16:11:00.667
所以我一直在尝试MAX(Create_Time)
SELECT
product_data.ProductUPC,
product_data.NAME,
product_data.Shelf,
product_data.Create_Time,
--Supplier--
Supplier = CASE supplier_data.Supplier_Code WHEN
WHEN '01' THEN 'BlueBerries'
WHEN '02' THEN 'Grey'
WHEN '03' THEN 'Coco'
ELSE 'OTHER' END
--JOINS--
FROM product_data
INNER JOIN
supplier_data ON supplier_data.ProductID = product_data.ProductID
WHERE
product_data.ProductUPC IS NOT NULL
AND product_data.create_time = (
SELECT MAX(product_data.create_time)
FROM product_data
)
但它只返回标题。 (没有信息)。
在选择范围内尝试MAX:
SELECT MAX(product_data.Create_Time)
product_data.ProductUPC,
product_data.NAME,
product_data.Shelf
--Supplier--
Supplier = CASE supplier_data.Supplier_Code WHEN
WHEN '01' THEN 'BlueBerries'
WHEN '02' THEN 'Grey'
WHEN '03' THEN 'Coco'
ELSE 'OTHER' END
--JOINS--
FROM product_data
INNER JOIN
supplier_data ON supplier_data.ProductID = product_data.ProductID
WHERE
product_data.ProductUPC IS NOT NULL
返回错误,指出我的其他列“在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。”所以我知道我在这里走错了路。
我出错的任何提示?感谢。
答案 0 :(得分:2)
您与GROUP BY
走在正确的轨道上。尝试在supplier_data
JOIN
:
JOIN
(SELECT
ProductUPC, MAX(Create_Time) Max_Create_Time
FROM product_data
GROUP BY ProductUPC) A ON product_data.ProductUPC = A.ProductUPC
AND product_data.Create_time = A.Max_Create_Time
编辑:另外,您提到此类数据是“重复数据”。情况不一定如此。这实际上并不是追踪变化的可怕方法。使用此系统,您可以跟踪随时间推移对产品所做的每项更改。当然还有其他方法来跟踪变化,但这肯定有效。在撰写查询和开发报告时,您只需要了解它。