使用最大日期和抓取唯一类型的SQL

使用最大日期和抓取唯一类型的SQL,sql,sql-server,Sql,Sql Server,我正试图缩小我的结果范围,并需要一些关于如何做到这一点的输入 我想做的是缩小范围,让它显示每个“类型”的最大邮寄日期。因此,在这种情况下,我希望它显示2020年7月17日插入销售的CatID MF,以及2018年8月31日核心销售的WK 我在想也许我需要在Where子句下写一个案例陈述,但我不确定该如何写,或者这是否是最好的方法。任何帮助都将不胜感激 代码: 您可以在分组依据中重复大小写表达式。或者,如我所愿,使用apply: SELECT pc.packnum, pc.CatID, MAX(b

我正试图缩小我的结果范围,并需要一些关于如何做到这一点的输入

我想做的是缩小范围,让它显示每个“类型”的最大邮寄日期。因此,在这种情况下,我希望它显示2020年7月17日插入销售的CatID MF,以及2018年8月31日核心销售的WK

我在想也许我需要在Where子句下写一个案例陈述,但我不确定该如何写,或者这是否是最好的方法。任何帮助都将不胜感激

代码:


您可以在
分组依据
中重复
大小写
表达式。或者,如我所愿,使用
apply

SELECT pc.packnum, pc.CatID, MAX(b.firstreleasemailed) as Maildate
       v.Type 
FROM pic704current pc JOIN
     CatCov cc 
     ON pc.CatID = cc.Offer AND
        pc.Year = cc.MailYear CROSS APPY
     (VALUES (Case when cc.description like '%Promo%' then 'Promo' 
                   when cc.description like '%Sale%' then 'Insert Sale' 
                   when cc.Description like '%ins%' and cc.Description not like '%sale%' then 'Insert Core' 
                   when cc.description like '%ons%' then 'Onsert'
                   Else 'Core'
              end)
    ) v(type)
WHERE pc.DiscountReasonCode Not in ('LT','UP', 'OR', 'ER', 'IP', 'WT') AND
      cc.firstreleasemailed <= getdate()
      pc.PackNum = '6762846'
GROUP BY pc.packnum, pc.CatID, v.type;

您可以在
分组依据
中重复
大小写
表达式。或者,如我所愿,使用
apply

SELECT pc.packnum, pc.CatID, MAX(b.firstreleasemailed) as Maildate
       v.Type 
FROM pic704current pc JOIN
     CatCov cc 
     ON pc.CatID = cc.Offer AND
        pc.Year = cc.MailYear CROSS APPY
     (VALUES (Case when cc.description like '%Promo%' then 'Promo' 
                   when cc.description like '%Sale%' then 'Insert Sale' 
                   when cc.Description like '%ins%' and cc.Description not like '%sale%' then 'Insert Core' 
                   when cc.description like '%ons%' then 'Onsert'
                   Else 'Core'
              end)
    ) v(type)
WHERE pc.DiscountReasonCode Not in ('LT','UP', 'OR', 'ER', 'IP', 'WT') AND
      cc.firstreleasemailed <= getdate()
      pc.PackNum = '6762846'
GROUP BY pc.packnum, pc.CatID, v.type;

谢谢我要试试这个。我会让你知道它是如何工作的。我已经更新了代码,但仍然得到相同的输出。我也很感激关于别名的建议。我还在学习SQL(自学),我知道我还有很多东西要学。@Deke。如果您只想将其用于
类型
,那么您不应该在
分组依据
选择
中有其他列。因此,我必须执行子查询以提取packnum,然后是catid列?@Deke。这些栏与您提出的问题无关,这是关于
类型和最短日期的问题。谢谢!我要试试这个。我会让你知道它是如何工作的。我已经更新了代码,但仍然得到相同的输出。我也很感激关于别名的建议。我还在学习SQL(自学),我知道我还有很多东西要学。@Deke。如果您只想将其用于
类型
,那么您不应该在
分组依据
选择
中有其他列。因此,我必须执行子查询以提取packnum,然后是catid列?@Deke。这些列与您所问的问题无关,这是关于
类型和最短日期的问题。
SELECT pc.packnum, pc.CatID, MAX(b.firstreleasemailed) as Maildate
       v.Type 
FROM pic704current pc JOIN
     CatCov cc 
     ON pc.CatID = cc.Offer AND
        pc.Year = cc.MailYear CROSS APPY
     (VALUES (Case when cc.description like '%Promo%' then 'Promo' 
                   when cc.description like '%Sale%' then 'Insert Sale' 
                   when cc.Description like '%ins%' and cc.Description not like '%sale%' then 'Insert Core' 
                   when cc.description like '%ons%' then 'Onsert'
                   Else 'Core'
              end)
    ) v(type)
WHERE pc.DiscountReasonCode Not in ('LT','UP', 'OR', 'ER', 'IP', 'WT') AND
      cc.firstreleasemailed <= getdate()
      pc.PackNum = '6762846'
GROUP BY pc.packnum, pc.CatID, v.type;
SELECT MAX(b.firstreleasemailed) as Maildate
       v.Type 
FROM pic704current pc JOIN
     CatCov cc 
     ON pc.CatID = cc.Offer AND
        pc.Year = cc.MailYear CROSS APPY
     (VALUES (Case when cc.description like '%Promo%' then 'Promo' 
                   when cc.description like '%Sale%' then 'Insert Sale' 
                   when cc.Description like '%ins%' and cc.Description not like '%sale%' then 'Insert Core' 
                   when cc.description like '%ons%' then 'Onsert'
                   Else 'Core'
              end)
    ) v(type)
WHERE pc.DiscountReasonCode Not in ('LT','UP', 'OR', 'ER', 'IP', 'WT') AND
      cc.firstreleasemailed <= getdate()
      pc.PackNum = '6762846'
GROUP BY v.type;