我对查询有困难,绝对让我难过。我有一个餐厅连锁的mysql数据库,可以跟踪每年的菜单项价格。在此特定查询中,我尝试仅获取每个商店中商品的最新价格。
ItemMenu
pk storeNum itemNum vendorNum size price year
1 5555 2000 3150 Large 3.99 2015
2 5555 2000 3150 Large 3.75 2014
3 3333 2000 3153 Large 3.69 2014
4 2222 2000 3150 Large 3.89 2014
5 2222 2000 3150 Large 3.69 2013
ItemList
itemNum item categoryNum
2000 Mashed Potatoes 2000
2001 Green Beans 2000
2002 Coleslaw 2000
2003 Baked Beans 2000
2004 Corn 2000
ItemCategory
categoryNum type
2000 Side
2001 Dessert
2002 Drink
2003 Sauce
ItemVendor
vendorNum vendorName
3150 Acme Foods
3152 John's Vegetables
3153 Smith's Wholesale
Stores
storeNum franchisee address phone
5555 David Smith 9999 Main st 555-1212
3333 James Bond 123 Baker 867-5309
2222 Mark Jones 450 21st Ave 888-5411
我想要归还的是
storeNum,特许经营商,商品,类型,供应商名称,尺寸,价格,年份 但仅限于最近一年。
5555, David Smith, Mashed Potatoes, Side, Acme Foods, Large, 3.99, 2015
3333, James Bond, Mashed Potatoes, Side, Smith's Wholesale, 3.69, 2014
2222, Mark Jones, Mashed Potatoes, Side, Acme Foods, Large, 3.89, 2014
我希望这是有道理的,我完全失去了如何加入多个表并且只提取最近一年的数据。
谢谢,
凯文我有这个工作,但遇到了另一个问题,由于年中价格上涨,我可能会在一年内有多个价格。在我选择了最大年份后,如何添加额外的子查询以获取最高价?
我当前的查询
SELECT m.storeNum, m.itemNum,size,m.price,year FROM ItemMenu m,
(SELECT storeNum, itemNum, MAX(year) maxYear FROM ItemMenu
GROUP BY storeNum, itemNum) yt, (SELECT storeNum, itemNum, MAX(price)
maxPrice FROM ItemMenu) mp
WHERE m.storeNum=yt.storeNum AND m.itemNum=yt.itemNum
AND m.year=yt.maxYear AND m.itemNum=5000 AND m.storeNum=205706;
返回最长年份的有效结果(我选择了特定商店和项目以减少结果数量。)
+----------+---------+------------+-------+------+
| storeNum | itemNum | size | price | year |
+----------+---------+------------+-------+------+
| 205706 | 5000 | Individual | 1.59 | 2014 |
| 205706 | 5000 | Large | 3.69 | 2014 |
| 205706 | 5000 | Large | 3.59 | 2014 |
| 205706 | 5000 | Individual | 1.79 | 2014 |
+----------+---------+------------+-------+------+
我需要进一步减少这一点,所以我只得到1.79美元和3.69美元的价值。
由于
-Kevin
答案 0 :(得分:0)
您需要使用子查询:第一次获得给定(item,store)
配对的最近一年的一组。接下来,选择(item,store,year)
三元组的价格:
SELECT m.storeNum, m.itemNum,price,year FROM ItemMenu m,
(SELECT storeNum, itemNum, MAX(year) maxYear FROM ItemMenu
GROUP BY storeNum, itemNum) yt
WHERE m.storeNum=yt.storeNum AND m.itemNum=yt.itemNum
AND m.year=yt.maxYear;
当然,您可以将各种ID->名称表加入到此处以获取人类可读的数据,但我怀疑您的问题是如何获取最新价格。
还应该注意,这可以使用JOIN
而不是在FROM
部分中包含子查询来完成;这可能会更快。