Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql groupby/是否合并到最新记录?_Sql_Sql Server_Tsql - Fatal编程技术网

Sql groupby/是否合并到最新记录?

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

我有两张桌子:

表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
我想生成一个我最后吃过的东西的列表,按食物类别分类。输出如下所示:

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代码,否则无论是否使用,它都是一样的,所以我在中加入了一个