如何产生连续时间?(案例)

原问题如下:

Insus.NET的问题解决,分2步,1,创建一个辅助表,2,合并数据。

程式码搜寻出来如图:

IF OBJECT_ID(N‘TEMPDB.DBO.#search_data‘) IS NOT NULL
DROP TABLE #search_data
GO

CREATE TABLE #search_data ([times] DATETIME,[val] INT)

INSERT INTO #search_data ([times],[val]) VALUES
(‘2001-01-01 00:00:00‘,13),
(‘2001-01-01 00:10:00‘,22),
(‘2001-01-01 00:20:00‘,31),
(‘2001-01-01 00:40:00‘,5 ),
(‘2001-01-01 00:50:00‘,64),
(‘2001-01-01 02:30:00‘,73),
(‘2001-01-01 04:10:00‘,63),
(‘2001-01-01 04:50:00‘,12),
(‘2001-01-01 06:30:00‘,32)
 

Source Code

接下来,我们可以创建一张辅助表:

DECLARE @start_datetime DATETIME = ‘2000-01-01 00:00:00‘,
        @end_datetime DATETIME  = ‘2000-02-01 00:00:00‘

;WITH DTs([times])
AS
(
    SELECT  @start_datetime
    UNION ALL
    SELECT [times] = DATEADD(MINUTE,10, [times])
    FROM [DTs]
    WHERE [times] < @end_datetime
)
SELECT [times] FROM [DTs] OPTION (MaxRecursion 0)

Source Code

总共产生4465行记录。

更多相关辅助表,可以参考《使用CTE生成辅助表(数字或时间)等https://www.cnblogs.com/insus/p/10946112.html 和《快速生成基数的辅助表https://www.cnblogs.com/insus/p/10946112.html

为了更好操作,把辅助表的产生数据存入一张临时表中:

IF OBJECT_ID(N‘TEMPDB.DBO.#base‘) IS NOT NULL
    DROP TABLE #base
GO

CREATE TABLE #base ([times] DATETIME)

DECLARE @start_datetime DATETIME = ‘2000-01-01 00:00:00‘,
        @end_datetime DATETIME  = ‘2000-02-01 00:00:00‘
;WITH DTs([times])
AS
(
    SELECT  @start_datetime
    UNION ALL
    SELECT [times] = DATEADD(MINUTE,10, [times])
    FROM [DTs]
    WHERE [times] < @end_datetime
)

INSERT INTO #base ([times]) SELECT [times] FROM [DTs] OPTION (MaxRecursion 0)

Source Code

第2步,合并数据,把程序搜索结果与辅助表的数据进行合并merge:

MERGE #search_data AS Target
    USING (SELECT [times] FROM #base) AS Source
    ON (Target.[times] = Source.[times])

    WHEN NOT MATCHED BY TARGET THEN
        INSERT ([times],[val]) VALUES ([times],0);  

SELECT [times],[val] FROM #search_data

Source Code

OK,实现方法仅供参考,完整代码:

IF OBJECT_ID(N‘TEMPDB.DBO.#search_data‘) IS NOT NULL
DROP TABLE #search_data
GO

CREATE TABLE #search_data ([times] DATETIME,[val] INT)

INSERT INTO #search_data ([times],[val]) VALUES
(‘2001-01-01 00:00:00‘,13),
(‘2001-01-01 00:10:00‘,22),
(‘2001-01-01 00:20:00‘,31),
(‘2001-01-01 00:40:00‘,5 ),
(‘2001-01-01 00:50:00‘,64),
(‘2001-01-01 02:30:00‘,73),
(‘2001-01-01 04:10:00‘,63),
(‘2001-01-01 04:50:00‘,12),
(‘2001-01-01 06:30:00‘,32)

IF OBJECT_ID(N‘TEMPDB.DBO.#base‘) IS NOT NULL
    DROP TABLE #base
GO

CREATE TABLE #base ([times] DATETIME)

DECLARE @start_datetime DATETIME = ‘2000-01-01 00:00:00‘,
        @end_datetime DATETIME  = ‘2000-02-01 00:00:00‘
;WITH DTs([times])
AS
(
    SELECT  @start_datetime
    UNION ALL
    SELECT [times] = DATEADD(MINUTE,10, [times])
    FROM [DTs]
    WHERE [times] < @end_datetime
)

INSERT INTO #base ([times]) SELECT [times] FROM [DTs] OPTION (MaxRecursion 0)

MERGE #search_data AS Target
    USING (SELECT [times] FROM #base) AS Source
    ON (Target.[times] = Source.[times])

    WHEN NOT MATCHED BY TARGET THEN
        INSERT ([times],[val]) VALUES ([times],0);  

SELECT [times],[val] FROM #search_data

Source Code

原文地址:https://www.cnblogs.com/insus/p/11025759.html

时间: 2024-11-08 15:18:22

如何产生连续时间?(案例)的相关文章

MATLAB信号与系统分析(五)&mdash;&mdash;连续时间信号的频谱分析

一.实验目的: 1.掌握傅立叶级数(FS),学会分析连续时间周期信号的频谱分析及MATLAB实现: 2.掌握傅立叶变换(FT),了解傅立叶变换的性质以及MATLAB实现. 二.利用符号运算求傅里叶级数的系数 1.复习几个函数: F1=int(f,v,a,b) - 对f表达式的v变量在(a,b)区间求定积分 F2=subs(s,OLD,NEW)-用新变量NEW代替S中的指定变量OLD. F3=vpa(x,n) : 显示可变精度计算:x为符号变量,n表示要精确计算的位数. 2.周期函数的傅里叶级数的

MATLAB信号与系统分析(一)&mdash;&mdash;连续时间信号与系统的时域分析

一.连续时间信号的表示: 1.向量表示法: 在MATLAB中,是用连续信号在等时间间隔点的样值来近似表示连续信号,当取样时间间隔足够小时,这些离散的样值就能较好地近似出连续信号. 对于连续时间信号f(t),一般是用两个行向量f和t来表示.t=t1:p:t2 ,t1 表示的是信号的起始时间,t2为终止时间,p为时间的间隔.而f为连续时间f(t)在向量t所定义的时间范围内对应的样值. 2.符号运算表示法: 使用sym定义变量,然后进行表示. Eg:分别采用上述两种方法画出抽样信号: clear al

连续时间查询问题-查询一个用户连续登陆天数超过N天的用户

问题:比如查询一个用户连续登陆天数超过7天的用户,或者查询连续在7天的某个时间段登陆的用户. 网上查询sql的语句的用法,对于hive来说也可以试试,查询词"SQL 连续天数查询" 如果使用hadoop如何解决?? 思路(以连续N天登陆为例): 1.计算出每天登陆的用户集合 1.使用MR,第一个job(map以日期为key,对用户进行分组输出.reduce设计:内部构造一个以N容量大小的列表(作为队列),模拟一下啊(日期过来就是有序的,从小到大) 1)第一个日期过来,放在list里面,

USACO s1.2.Milking Cows(求最长连续时间和最长间断时间)

题意:输入多个时间段,表示喂牛的时间,问喂牛的最长的持续时间和不喂牛的最长的时间. key:注意输入的时间没有先后顺序.有两种方法.一是对时间段进行排序,比较每段时间的的末尾就行了,记得求得最大连续时间的时候要更新最后的时间,更新最大间断时间的时候要更新最前面的时间.方法二,用数组标记喂牛时间,,for一遍大概就可以找到这两个时间了.下面的是方法一. /* TASK:milk2 LANG:C++ ID:huibaochen */ #include <iostream> #include <

[离散时间信号处理学习笔记] 11. 连续时间信号的采样与重构

这一节主要讨论采样定理,在<傅里叶变换及其应用及其学习笔记>中有进行过推导与讲解,因此下面的内容也大同小异.不过如果是从<离散时间信号处理>这一本书的内容开始学习到这一节,则应先学习本文内容所需要的一些前置知识:傅里叶变换(连续时间),主要用到的是脉冲函数$\delta$,以及周期脉冲函数Ш的傅里叶变换与相关性质. 周期采样 假设有连续信号$x_c(t)$,我们需要通过对该信号进行采样才能得到离散信号,即样本序列$x[n]$.连续信号与离散信号有以下关系: $x[n] = x_c(

[离散时间信号处理学习笔记] 12. 连续时间信号的离散时间处理以及离散时间信号的连续时间处理

连续时间信号与离散时间信号之间的关系 下表为各符号的解释 Symbol FT DTFT Info $x_c(t)$ $X_c(j\Omega)$ - 连续时间信号 $x[n]$ - $X(e^{j\omega})$ 离散时间信号 $s(t)$ $S(j\Omega)$ - 周期脉冲函数.即采样函数 $x_s(t)$ $X_s(j\Omega)$ - 信号周期采样的数学表示 $\Omega_N$ - - 奈奎斯特频率,也就是带限信号的受限频率 $\Omega_s$ - - 采样频率 $T$ - -

连续时间傅里叶变换

1. 非周期信号的表示:连续时间傅里叶变换 为了对傅里叶变换的实质进行更深入的了解,我们先从一个连续时间周期方波的傅里叶级数表示着手.即,在一个周期内 \[x(t) = \begin{cases} 1, & \text |t| < T_1 \0, & \text T_1 < |t| < T/2 \end{cases}\] 以周期 \(T\) 周期重复,如下图所示. 该方波信号的傅里叶级数系数 \(a_k\) 是 \[ \tag{1}a_k = \frac{2sin(k\o

Java 之 cookie 记住用户登录时间案例

需求: 1. 访问一个Servlet,如果是第一次访问,则提示:您好,欢迎您首次访问. 2. 如果不是第一次访问,则提示:欢迎回来,您上次访问时间为:显示时间字符串 分析: 1. 可以采用Cookie来完成 2. 在服务器中的Servlet判断是否有一个名为lastTime的cookie 2.1 有:不是第一次访问 1. 响应数据:欢迎回来,您上次访问时间为:2019年10月4日11:50:20 2. 写回Cookie:lastTime=2019年10月4日11:50:01 2.2 没有:是第一

动态显示时间案例

步骤 1.得到当前时间 2.需要让页面每一秒获取时间    setInterval方法 3.显示到页面上    innerHTML属性 <html> <head> <title>Html示例</title> <style type="text/css"> </style> </head> <body> <div id ="times"> </div>