首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从SQL DB中提取(抽样)时间序列

从SQL DB中提取(抽样)时间序列
EN

Stack Overflow用户
提问于 2016-08-09 05:17:17
回答 4查看 184关注 0票数 1

我有一个MS数据库,其中包含带有时间戳的值。我的结果表如下所示:

代码语言:javascript
运行
AI代码解释
复制
date        value
03.01.2016  11
19.01.2016  22
29.01.2016  33
17.02.2016  44
01.03.2016  55
06.03.2016  66

时间戳实际上不太符合某种模式。现在,我需要从这里提取每周的数据:(例如,星期五抽样)

代码语言:javascript
运行
AI代码解释
复制
date        value
01.01.2016  11     // friday
08.01.2016  11     // next friday
15.01.2016  11
22.01.2016  22
29.01.2016  33
05.02.2016  33
12.02.2016  33
19.02.2016  44
26.02.2016  44
04.03.2016  55
11.03.2016  66

在T中有合理的方法直接这样做吗?

我可以使用C#或Matlab程序重新格式化结果表,但这似乎有点奇怪,因为我似乎再次查询了结果表.

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-08-11 00:42:46

我找到了我自己的解决方案,我觉得这更容易读懂。我首先使用WHILE循环来生成我正在寻找的日期。然后,我使用外部应用程序将这些日期“连接”到实际数据表,该表查找“特定日期之前的最后一个值”。下面是代码:

代码语言:javascript
运行
AI代码解释
复制
-- prepare in-memory table
declare @tbl table ( [date] date, [value] int )
insert into @tbl
 values
 ('2016-01-03','11'),
 ('2016-01-19','22'),
 ('2016-01-29','33'),
 ('2016-02-17','44'),
 ('2016-03-01','55'),
 ('2016-03-06','66')

-- query
declare @startDate date='2016-01-01';
declare @endDate date='2016-03-31';

with Fridays as (
    select @startDate as fridayDate
    union all
    select dateadd(day,7,fridayDate) from Fridays where dateadd(day,7,fridayDate)<=@endDate
)

select * 
from 
    Fridays f
    outer apply (
        select top(1) * from @tbl t
        where f.fridayDate >= t.[date]
        order by t.[value] desc
    ) as result

option (maxrecursion 10000)

给我:

代码语言:javascript
运行
AI代码解释
复制
fridayDate date       value
---------- ---------- -----------
2016-01-01 NULL       NULL
2016-01-08 2016-01-03 11
2016-01-15 2016-01-03 11
2016-01-22 2016-01-19 22
2016-01-29 2016-01-29 33
2016-02-05 2016-01-29 33
2016-02-12 2016-01-29 33
2016-02-19 2016-02-17 44
2016-02-26 2016-02-17 44
2016-03-04 2016-03-01 55
2016-03-11 2016-03-06 66
2016-03-18 2016-03-06 66
2016-03-25 2016-03-06 66

谢谢大家的想法和支持!

票数 0
EN

Stack Overflow用户

发布于 2016-08-09 05:43:19

您可以使用CROSS JOININNER JOIN。我个人认为INNER JOIN更有效率。

样本数据:

代码语言:javascript
运行
AI代码解释
复制
CREATE TABLE #Temp(SomeDate  DATE
              , SomeValue VARCHAR(10));

INSERT INTO      #Temp(SomeDate
                 , SomeValue)
VALUES
      ('20160103'
     , 11),
      ('20160119'
     , 22),
      ('20160129'
     , 33),
      ('20160217'
     , 44),
      ('20160301'
     , 55),
      ('20160306'
     , 66)

使用交叉连接的查询:

代码语言:javascript
运行
AI代码解释
复制
;WITH T
    AS (SELECT *
        FROM   #Temp),
    D
    AS (
    SELECT SomeDate
        , SomeValue
    FROM     #Temp AS A
    UNION
    SELECT DATEADD(day, 7, SomeDate)
        , SomeValue
    FROM     #Temp AS B
    UNION
    SELECT DATEADD(day, 14, SomeDate)
        , SomeValue
    FROM   #Temp AS C)
    SELECT D.*
    FROM   T
          CROSS JOIN D
    WHERE  T.SomeValue = D.SomeValue
    ORDER BY SomeValue
          , SomeDate;

结果:

使用内部连接的查询:

代码语言:javascript
运行
AI代码解释
复制
;WITH T
    AS (SELECT *
        FROM   #Temp),
    D
    AS (
    SELECT SomeDate
        , SomeValue
    FROM     #Temp AS A
    UNION
    SELECT DATEADD(day, 7, SomeDate)
        , SomeValue
    FROM     #Temp AS B
    UNION
    SELECT DATEADD(day, 14, SomeDate)
        , SomeValue
    FROM   #Temp AS C)
    SELECT D.*
    FROM   T
          INNER JOIN D
    ON  T.SomeValue = D.SomeValue
    ORDER BY SomeValue
          , SomeDate;

结果:

票数 1
EN

Stack Overflow用户

发布于 2016-08-09 06:25:24

此解决方案支持从第一个值时间开始的252周的最长时间窗口。

您想要的输出的第一行丢失了,因为星期五在第一个值之前。如果需要的话,您可以通过一个带有一分钟表的UNION来添加它。

代码语言:javascript
运行
AI代码解释
复制
DECLARE @tbl TABLE ( [date] date, [value] int )

INSERT INTO @tbl
 VALUES
 ('2016-01-03','11'),
 ('2016-01-19','22'),
 ('2016-01-29','33'),
 ('2016-02-17','44'),
 ('2016-03-01','55'),
 ('2016-03-06','66')


;WITH DATA
    AS (
SELECT (S+P+Q) WeekNum, DATEADD( week, S + P + Q, MinDate ) Fridays, SubFri, [value]
   FROM ( SELECT 1 S UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 ) A
   CROSS JOIN ( SELECT 0 P UNION SELECT 7 UNION SELECT 14 UNION SELECT 21 UNION SELECT 28 UNION SELECT 35 ) B
   CROSS JOIN ( SELECT 0 Q UNION SELECT 42 UNION SELECT 84 UNION SELECT 126 UNION SELECT 168 UNION SELECT 210 ) C
   CROSS JOIN (
     SELECT
        min ( DATEADD( day, -8 - DATEPART(weekday,[date]), [date] ) ) MinDate,
        max ( DATEADD( day, 13 - DATEPART(weekday,[date]), [date] ) ) MaxDate
      FROM @tbl
     ) MD
   LEFT JOIN ( SELECT DATEADD( day, 6 - DATEPART(weekday,[date]), [date] ) SubFri, [value] FROM @tbl ) Val
    ON SubFri<=DATEADD( week, S + P + Q, MinDate )
   WHERE DATEADD( week, S + P + Q, MinDate )<=MaxDate
)


SELECT DATA.Fridays, DATA.value
 FROM DATA
 INNER JOIN
 (
  SELECT Fridays, max(SubFri) MaxSubFri
   FROM DATA
   GROUP BY Fridays
 ) idx
  ON DATA.Fridays=idx.Fridays
   AND SubFri=MaxSubFri
 ORDER BY Fridays
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38851896

复制
相关文章
使用typescript开发chrome扩展
ianzhi
2023/10/19
7160
使用typescript开发chrome扩展
Chrome浏览器启动报错:“应用程序无法启动,因为应用程序的并行配置不正确”
今天打开chrome浏览器时候出错,错误提示:“应用程序无法启动,因为应用程序的并行配置不正确。有关详细信息,请参阅应用程序事件日志,或使用命令行 sxstrace.exe 工具。”。
浩Coding
2020/03/30
21.6K0
Chrome浏览器启动报错:“应用程序无法启动,因为应用程序的并行配置不正确”
使用 Google 浏览器 Chrome 的扩展
Google 浏览器 Chrome 是我现在主要使用的浏览器,Chrome 更新到 2.0 之后,除了支持 Greasemonkey 之外,也开始支持扩展。 要让 Google 浏览器支持扩展,你首先要把 Chrome 升级到 2.0 最新版本,然后找到 Chrome 的快捷方式,右键单击它,然后选择属性,然后在 target 输入框里面添加这个参数: --enable-extensions,重启浏览器就可以了。
Denis
2023/04/14
1K0
使用 Google 浏览器 Chrome 的扩展
Chrome扩展开发
注:content_scripts段中的代码会在页面加载对应阶段"document_start", “document_end”, or "document_idle"自动注入 但是脚本运行在与页面独立的上下文中,无法访问到原页面的脚本上下文资源 如需访问原页面脚本上下文,可在content_scripts脚本中将web_accessible_resources段中声明的脚本注入到document中 样例: js/content-script.js
路过君
2020/06/19
9050
chrome扩展推荐-Tampermonkey
  得益于Google的品牌力量和技术实力,chrome浏览器近年来的市场占有率不断上升。reizhi也是chrome的爱好者之一,从最原始的IE,到假死王maxthon,再到轻快的opera,最后让我留恋chrome的理由还是强大的可扩展性。虽然资源占用永远都是抛不开的弱点,但无与伦比的速度和极致的可扩展性是有目共睹的。
reizhi
2022/09/26
9770
chrome扩展推荐-Tampermonkey
认识Chrome扩展插件
1、前言 现如今的时代,绝大多数人都要跟浏览器打交道的,说到浏览器那肯定是Chrome浏览器一家独大,具体数据请看👇 知名流量监测机构 Statcounter 公布了 7 月份全球桌面浏览器市场份额,主要数据如下: 浏览器 市场份额 月涨跌份额 Chrome 66.19% -0.74% Edge 10.84% +0.2% Safari 8.94% +0.01% Firefox 8.08% +0.28% Opera 3.06% +0.08% IE 0.75% 浏览器扩展插件的用途 生产力工具(和浏览器进
甜点cc
2022/09/26
1.2K0
编写Chrome扩展程序
Chrome的扩展程序很多,也很容易入门,可以来简单实现一下 看看 官方文档 或者翻译的文档:百度、360,慢慢就能实现出一个扩展程序来 每个扩展程序应用一般会包含: 一个manifest清单文件 h
书童小二
2018/09/03
9050
编写Chrome扩展程序
使用HTML,CSS和JavaScript创建Chrome扩展程序
谷歌浏览器是开发人员和普通用户最喜欢的浏览器之一。我在所有设备上都使用了Google Chrome浏览器,它可以帮助我同步书签,浏览器历史记录,密码管理器等等。
海拥
2021/08/23
2K0
使用HTML,CSS和JavaScript创建Chrome扩展程序
kali安装chrome后,无法启动chrome
5.安装成功后,点击chrome图标,发现并不能启动浏览器。这是由于chrome默认是普通用户运行的,root不能够运行chrome。所以我们要使得root可以运行chrome。
青木
2019/04/18
5.8K0
kali安装chrome后,无法启动chrome
android应用程序_chrome Android
最近在看Android源码Setting代码的时候,发现其中配置都是用的PreferenceFragment,以前对这一块不是很了解,
全栈程序员站长
2022/10/04
5250
android应用程序_chrome Android
Chrome扩展开发入门
近几年,随着 IE 浏览器的落幕,Chrome(包括使用Chrome内核的浏览器)其实质上已经垄断整个浏览器行业了,就连微软的 Edge 都用上了 Chrome 内核。 可以说,Chrome 的标准,事实上就可以看做是行业标准了。可以预见,Chrome 的发展前景将会非常广阔。
epoos
2022/09/19
4.1K0
Chrome扩展开发入门
那些实用的 Chrome 扩展神器
之前已经写过不少Chrome扩展那些我常用的 Chrome 扩展,这里继续推荐那些实用Chrome扩展 ,所谓实用就是能解决实际问题。
数据森麟
2019/12/31
1.2K0
那些实用的 Chrome 扩展神器
使用am start命令启动android apk应用程序
启动tbox service test apk adb root adb shell am start -n com.demo.hmi.xxxservices.xxx/.MainActivity
天天Lotay
2023/10/15
2.5K0
Chrome扩展开发入门体验
****前言**** Chrome浏览器扩展开发算是相当简单的,基本只要掌握HTML+CSS+Javascript,即可快速开发一个属于你的Chrome插件! ---- ****Chrome扩展基本目录结构**** manifest.json 这是一个配置文件,里面记录了扩展的使用范围、作者、版本、其余需要加载的文件等内容; icon.png 这个一看便知,就是扩展的图标~~~ popup.html 点击扩展图标,弹出的面板页面(如果在manifest.json中配置了default
AlicFeng
2018/06/08
1.1K0
【高级开发进阶】1.1.1 启动类、扩展类、应用程序类加载器
学完本章中,读者需要回答: 1.类加载器的运行过程 2.类加载器分别在JRE的那些位置 3.什么是双亲委派机制? 我想大家一开始都想知道一个java文件是怎么在JVM里面运行的? 先上图帮助你理解
Java廖志伟
2021/02/02
5060
chrome扩展应用开发快速科普
本文通过对chrome插件的各个部分进行快速的介绍,从而让大家了解插件各个部分的关系,并且知道如何将其进行组装成一个完整的chrome插件。
黄Java
2018/09/18
9890
chrome扩展应用开发快速科普
Chrome迅雷下载支持扩展1.1
喜欢chrome浏览器又经常使用迅雷下载东西的朋友注意了,chrome迅雷下载扩展已经发布了。再也不用复制到IE打开或者使用IE tab了。
reizhi
2022/09/26
9380
Chrome迅雷下载支持扩展1.1
点击加载更多

相似问题

如何从Chrome扩展启动Chrome应用程序?

26

自动启动chrome扩展

13

从Google Chrome扩展启动外部应用程序?

5162

如何启动chrome扩展标签?

11

从Mac启动Chrome扩展

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文