栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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()) + 1from dwhere val = last_valgroup by city;

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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/373301.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号