Sql groupby/是否合并到最新记录?
我有两张桌子: 表1:冰箱中的食物:Sql groupby/是否合并到最新记录?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有两张桌子: 表1:冰箱中的食物: Food | Category --------------- Apple | Fruit Beef | Meat Tomato| Veggie Pork | Meat Bacon | Meat Orange| Fruit Carrot| Veggie 表2:吃的食物: Date | Food ------------ Mon | Apple Mon | Beef Tues | Pork Thurs| Orange Sat | Tomato
Food | Category
---------------
Apple | Fruit
Beef | Meat
Tomato| Veggie
Pork | Meat
Bacon | Meat
Orange| Fruit
Carrot| Veggie
表2:吃的食物:
Date | Food
------------
Mon | Apple
Mon | Beef
Tues | Pork
Thurs| Orange
Sat | Tomato
我想生成一个我最后吃过的东西的列表,按食物类别分类。输出如下所示:
Categ| Food
-----------
Meat | Pork
Fruit| Orange
Veggi| Tomato
我无法分组和合并行,有什么建议吗
谢谢 假设您真的在日期列中使用了工作日的名称,下面是一个解决方案,它将工作日转换为工作日索引,并按类别查找最新的食物:
;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
演示:它们被猪肉和橘子“覆盖”。因为我吃的最后一个水果是橘子,最后一个肉是猪肉。你使用的是什么版本的SQL Server?。另外,
Date
真的只是一周中的一部分吗?或者是一个合适的Date/DATETIME
列吗?测试模式:@mellamokb-我真的希望[Date]
不是这样,这正是我需要的。谢谢不,我的日期不是以天的形式存储的(那太糟糕了),它是以datetime数据类型存储的,但为了简单起见,我在本例中使用了一周中的几天,很明显,它会被回击。有一点,试图简化您的示例太过分了:)快速问题,是否有理由使用;第一行中的FW为
,带有代码>在前面?我尝试在没有脚本的情况下运行脚本,得到了相同的输出。谢谢代码>导致将以前的所有SQL视为一个完整的语句。除非在with
语句前面有SQL代码,否则无论是否使用,它都是一样的,所以我在中加入了一个习惯性地站在前面。哦,这是一个很好的练习,我真的应该开始使用它了。谢谢@mellamokb:)