GVKun编程网logo

在 SQL 中合并/组合重叠的时间范围(合并sql语句)

13

在这篇文章中,我们将带领您了解在SQL中合并/组合重叠的时间范围的全貌,包括合并sql语句的相关情况。同时,我们还将为您介绍有关APS算法-截取时间范围内的时间段、c#–检查表是否包含重叠的时间跨度、

在这篇文章中,我们将带领您了解在 SQL 中合并/组合重叠的时间范围的全貌,包括合并sql语句的相关情况。同时,我们还将为您介绍有关APS算法-截取时间范围内的时间段、c# – 检查表是否包含重叠的时间跨度、Cloudwatch 仪表板:具有独立时间范围的小部件? 我希望仪表板中的每个小部件都有自己的时间范围、Java中传入一个时间范围,取出该时间范围内所有日期的集合的知识,以帮助您更好地理解这个主题。

本文目录一览:

在 SQL 中合并/组合重叠的时间范围(合并sql语句)

在 SQL 中合并/组合重叠的时间范围(合并sql语句)

如何解决在 SQL 中合并/组合重叠的时间范围?

我有一个表格,其中包含每个客户及其位置的几个合同信息。

每个客户可以同时拥有 1-x 个位置。每个位置可以有 x 个合约,但不能重叠。

现在我需要将这些信息聚集到整体时间范围

以图片为例:

uploaded to imgur

作为表格:

源表:

客户 ID 位置标识 contract_signed contract_start contract_end
123 001 ''2012-04-02'' ''2012-09-01'' ''2014-04-15''
123 001 ''2014-12-01'' ''2015-01-01'' ''2018-03-31''
123 001 ''2019-07-01'' ''2020-01-01'' ''2021-09-30''
123 002 ''2012-07-01'' ''2012-09-01'' ''2014-04-15''
123 002 ''2014-12-01'' ''2015-07-01'' ''2018-03-31''
123 002 ''2018-07-01'' ''2018-10-01'' ''2021-09-30''
123 003 ''2014-09-01'' ''2015-07-01'' ''2018-03-31''

以及我想要的结果:

客户 ID contract_signed contract_start contract_end days_without_contract
123 ''2012-04-02'' ''2012-09-01'' ''2014-04-15'' NULL
123 ''2014-09-01'' ''2015-01-01'' ''2018-03-31'' 139
123 ''2018-07-01'' ''2018-07-01'' ''2021-09-30'' 92

解决方法

这是一种间隙和孤岛问题。您可以使用累积 max() 来确定是否没有重叠。如果没有,那么这就是一个“孤岛”的开始,聚合完成剩下的工作:

select customer_id,min(contract_signed),min(contract_start),max(contract_end),datediff(day,lag(contract_start) over (order by customer_id)) as days_without_contract
from (select t.*,sum(case when prev_contract_end >= contract_start then 0 else 1 end) over (partition by customer_id order by contract_start) as grp
      from (select t.*,max(contract_end) over (partition by customer_id 
                                           order by contract_start,location
                                           rows between unbounded preceding and 1 preceding
                                          ) as prev_contract_end
            from t
           ) t
      ) t
group by customer_id,grp;

APS算法-截取时间范围内的时间段

APS算法-截取时间范围内的时间段

下面是小编 jb51.cc 通过网络收集整理的代码片段。

小编小编现在分享给大家,也给大家做个参考。

/// <summary>
/// 截取时间范围内的时间段
/// </summary>
public static List<SJDuan> GetBetween(this SortedList<DateTime,SJDuan> duans,DateTime begin,DateTime end)
{
    DebugHelper.Start("GetBetween"); // 用于时间统计
    
    var rslt = new List<SJDuan>();
    if (end > begin)
    {
        var first = duans.Keys.GetFirstIndexBefore(begin);
        if (first == null)
        {
            first = 0;
        }
        var last = duans.Keys.GetFirstIndexAfter(end);
        if (last == null)
        {
            last = duans.Count - 1;
        }
        else
        {
            last = last - 1;
        }

        for (int i = first.Value; i <= last; i++)
        {
            var duan = duans.Values[i];
            if (duan.end > begin && duan.begin < end)
            {
                var dbegin = duan.begin > begin ? duan.begin : begin;
                var dend = duan.end < end ? duan.end : end;
                rslt.Add(new SJDuan(dbegin,dend));
            }
        }
    }
    DebugHelper.Stop("GetBetween");
    return rslt;
}

以上是小编(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给程序员好友。

c# – 检查表是否包含重叠的时间跨度

c# – 检查表是否包含重叠的时间跨度

我有一个带有两列FromDate和ToDate的数据表,它们是字符串格式.
我想检查一下我的table.i.e中是否有任何重复的记录
From Date    To Date
----------------------      
9/01/2012    9/16/2012   
8/23/2012    8/24/2012   
8/25/2012    8/25/2012   
8/5/2012     8/6/2012    
8/26/2012    8/27/2012   
9/15/2012    9/23/2012

该表包含重复记录,因为它们的日期范围是映射的

From Date       To Date      
----------------------      
9/01/2012    9/16/2012   
9/15/2012    9/23/2012

它应该返回false.

解决方法

var query = from row in dt.AsEnumerable()
            from row1 in dt.AsEnumerable()
            where
            (

                 (
                     DateTime.Parse(row1.Field<string>("fromDate")) >= DateTime.Parse(row.Field<string>("fromDate")) &&
                     DateTime.Parse(row1.Field<string>("fromDate")) <= DateTime.Parse(row.Field<string>("toDate"))
                 )
                 ||
                 (
                     DateTime.Parse(row1.Field<string>("toDate")) >= DateTime.Parse(row.Field<string>("fromDate")) &&
                     DateTime.Parse(row1.Field<string>("toDate")) <= DateTime.Parse(row.Field<string>("toDate"))
                 )
            )
            select new
            {
                fromDate = DateTime.Parse(row1.Field<string>("fromDate")),toDate = DateTime.Parse(row1.Field<string>("toDate"))
            };
//This lst contains the dates which are overlapping    
var lst = query.distinct().ToList();

Cloudwatch 仪表板:具有独立时间范围的小部件? 我希望仪表板中的每个小部件都有自己的时间范围

Cloudwatch 仪表板:具有独立时间范围的小部件? 我希望仪表板中的每个小部件都有自己的时间范围

如何解决Cloudwatch 仪表板:具有独立时间范围的小部件? 我希望仪表板中的每个小部件都有自己的时间范围?

我希望仪表板中的每个小部件都有自己的时间范围

我找不到办法做到这一点,如果不可能,我会觉得这令人难以置信。 我希望我的仪表板包含以下堆叠区域小部件:

  • 过去一小时的 RequestCount 以 30 秒为周期(即 120 个绘图点)
  • 过去一天的 RequestCount 以 1 小时为周期(即 24 个情节点)
  • 过去一周的 RequestCount,时间为 6 小时(即 28 个情节点)

但是,我似乎无法强制每个小部件的时间范围(仅它们的时间段),并且仪表板的时间范围会覆盖所有内容,无论我之前在每个小部件中设置了什么。

有没有办法让每个小部件保持其原始时间范围?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

Java中传入一个时间范围,取出该时间范围内所有日期的集合

Java中传入一个时间范围,取出该时间范围内所有日期的集合

直接上代码:

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.List;
import java.util.Optional;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import com.sun.org.apache.xerces.internal.impl.xpath.regex.ParseException;

import java.text.DateFormat;
import java.text.SimpleDateFormat;

/**
 * 
  * @description: Java中传入一个时间段,取出该时间段内所有日期的集合
 * @author: fuzongle
 * @Date: 2019-11-22 16:06
 *
 */
public class Demo01 {
    
       public static void main(String[] args) throws Exception {

           
            findDates("2018-02-12","2018-11-25");

        }

       public static List<String> findDates(String dBegin, String dEnd) throws ParseException, java.text.ParseException {
            //日期工具类准备
            DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
     
            //设置开始时间
            Calendar calBegin = Calendar.getInstance();
            calBegin.setTime(format.parse(dBegin));
     
            //设置结束时间
            Calendar calEnd = Calendar.getInstance();
            calEnd.setTime(format.parse(dEnd));
     
            //装返回的日期集合容器
            List<String> Datelist = new ArrayList<String>();
            //将第一个月添加里面去
            Datelist.add(format.format(calBegin.getTime()));
            // 每次循环给calBegin日期加一天,直到calBegin.getTime()时间等于dEnd
            while (format.parse(dEnd).after(calBegin.getTime()))  {
                // 根据日历的规则,为给定的日历字段添加或减去指定的时间量
                calBegin.add(Calendar.DAY_OF_MONTH, 1);
                Datelist.add(format.format(calBegin.getTime()));
            }
     
            System.out.println(Datelist);
            return Datelist;
        }

}

控制台打印结果:

  

关于在 SQL 中合并/组合重叠的时间范围合并sql语句的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于APS算法-截取时间范围内的时间段、c# – 检查表是否包含重叠的时间跨度、Cloudwatch 仪表板:具有独立时间范围的小部件? 我希望仪表板中的每个小部件都有自己的时间范围、Java中传入一个时间范围,取出该时间范围内所有日期的集合等相关知识的信息别忘了在本站进行查找喔。

本文标签: