1

私は2つのテーブルを持っています:

表1:Food_I_Have_In_Fridge:

Food  | Category
---------------
Apple | Fruit
Beef  | Meat
Tomato| Veggie
Pork  | Meat
Bacon | Meat
Orange| Fruit
Carrot| Veggie

表2:Food_I_ate:

Date | Food
------------
Mon  | Apple
Mon  | Beef
Tues | Pork
Thurs| Orange
Sat  | Tomato

私が最後に食べたもののリストを食品カテゴリ別に生成したいと思います。出力は次のようになります。

Categ| Food
-----------
Meat | Pork
Fruit| Orange
Veggi| Tomato

行をグループ化してマージすることができませんでした、何か提案はありますか?

ありがとう!

4

1 に答える 1

2

日付列に実際に平日の名前を使用していると仮定すると平日を平日のインデックスに変換し、カテゴリ別に最新の食品を見つけるソリューションは次のとおりです。

;with FW as (
    select w.ix, f.category, a.food, a.date
    from
        [Food_I_ate] a
    inner join
        [Food_I_Have_In_Fridge] f on a.Food = f.Food
    inner join
    (
        select 0 as ix, 'Sun' as weekdayname union
        select 1, 'Mon' union
        select 2, 'Tues' union
        select 3, 'Wed' union
        select 4, 'Thurs' union
        select 5, 'Fri' union
        select 6, 'Sat'
     ) w on w.weekdayname = a.[Date]
)
select
    FW2.category,
    FW2.Food,
    FW2.Date
from
    (select FW.category, max(fw.ix) as maxix
     from FW group by FW.category) FW
inner join
    FW FW2 on FW2.ix = FW.maxix and FW2.category = FW.category

サンプル出力:

CATEGORY    FOOD    DATE
Veggie      Tomato  Sat
Meat        Pork    Tues
Fruit       Orange  Thurs

デモ:http ://www.sqlfiddle.com/#!3 / 4b92f / 21

于 2012-04-20T20:01:04.697 に答える