您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

SQL:自首次出现某些值以来的行数:继续计数

SQL:自首次出现某些值以来的行数:继续计数

您的数据结构存在重大问题。值应该 在行中 ,而不是 列中 。因此,从以下内容开始:

select d.dte, v.*from data d cross apply
     (values ('Toronto', Toronto), ('Cairo', Cairo), . . .
     ) v(city, val)
where d.date >= dateadd(day, -5, getdate());

从那里,我们可以使用window函数first_value()(或last_value())来获取最新的读数。其余的只是按城市汇总:

with d as (
      select d.dte, v.*,
             first_value(v.val) over (partition by v.city order by d.dte desc) as last_val
      from data d cross apply
           (values ('Toronto', Toronto), ('Cairo', Cairo), . . .
           ) v(city, val)
      where d.date >= dateadd(day, -5, getdate())
     )
select city, datediff(day, min(dte), getdate()) + 1
from d
where val = last_val
group by city;

这样可以以行而不是列的形式为您提供所需的信息。您可以根据需要重新旋转。但我建议您将数据与城市数据保留在不同的行中。

SQLServer 2022/1/1 18:53:00 有341人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶