具有重叠日期的SQL总和

时间:2014-06-17 12:53:56

标签: sql sum

我有一个包含以下列的表:

从 至 WorkQuota

现在我需要具有重叠日期的工作配额的总和。执行sql查询后,如果总和大于100,我将检查我的应用程序。

是否可以在SQL中执行此操作?

提前致谢

西瓦

编辑:

我需要从重叠的记录中得到工作配额的总和。但我认为这不可能像SQL那样。

示例:

Feb1-Feb3 80% - Feb2-Feb4 30% - >这应该在我的结果中显示为110%,因为它重叠且超过100%。

2月10日 - 2月12日50% - 2月14日 - 2月15日20% - 2月16日 - 2月18日100% - 我不在乎因为日期不重叠

2月20日 - 2月24日50% - 2月21日 - 2月22日20% - 我不在乎,因为工作配额低于100%

2 个答案:

答案 0 :(得分:0)

您可以使用此查询来获取输出:

 SELECT t1.From ,t1.To, SUM(t1.WorkQuota) FROM TABLE t1 inner join TABLE t2 on t1.FROM = t2.TO GROUP BY t1.FROM,t1.To;

答案 1 :(得分:0)

我认为不可能一步到位。所以我写了一个函数来检查日期是否重叠:

'Testing Function CheckDatesOverlap
Private Sub Command1_Click()
    Dim dFrom1, dTo1, dFrom2, dTo2 As Date

    'Init Date
    dFrom2 = CDate("01.01.2000")
    dTo2 = CDate("01.01.2010")

    'There are 4 possibilities

    'Possibility 1:
    dFrom1 = CDate("01.01.1995")
    dTo1 = CDate("01.01.2005")

    If CheckDatesOverlap(dFrom1, dTo1, dFrom2, dTo2) Then
        MsgBox "Success"
    End If

    'Possibility 2:
    dFrom1 = CDate("01.01.2005")
    dTo1 = CDate("01.01.2015")

    If CheckDatesOverlap(dFrom1, dTo1, dFrom2, dTo2) Then
        MsgBox "Success"
    End If

    'Possibility 3:
    dFrom1 = CDate("01.01.2004")
    dTo1 = CDate("01.01.2008")

    If CheckDatesOverlap(dFrom1, dTo1, dFrom2, dTo2) Then
        MsgBox "Success"
    End If

    'Possibility 4:
    dFrom1 = CDate("01.01.1995")
    dTo1 = CDate("01.01.2015")

    If CheckDatesOverlap(dFrom1, dTo1, dFrom2, dTo2) Then
        MsgBox "Success"
    End If
End Sub

Public Function CheckDatesOverlap(ByVal dFrom1 As Date, ByVal dTo1 As Date, ByVal dFrom2 As Date, ByVal dTo2 As Date) As Boolean   
    If (dFrom1 >= dFrom2 And dFrom1 <= dTo2) Or (dTo1 >= dFrom2 And dTo1 <= dTo2) Or (dFrom1 < dFrom2 And dTo1 > dTo2) Then
        CheckDatesOverlap = True
    End If
End Function

如果sombody在我的问题中知道SQL的解决方案,我将非常感激。否则我希望我可以帮助某人。