【问题标题】:Oracle: Date Range甲骨文:日期范围
【发布时间】:2017-09-21 05:38:02
【问题描述】:

我有以下查询和表:

问题: 我正在尝试捕获该月重新分配的 ID。

例如,8 月份重新分配的总数将是 1 而不是 3

如何捕获?

例如,我需要计算每个月。如何重新分配 8 月、9 月等月份的妈妈 ID。

因此,Most_Rent_Assigment 日期需要在该月内 八月:8/1-8/31 九月:9/1-9/30 然后计数以捕获在该月重新分配了多少个 id

 ,CASE WHEN 
H.FIRST_ASSGN_DT IS NULL THEN 'UnAssigned'
WHEN h.TOTAL_NUMBER_OF_REASSIGNMENTS = 0 OR h.TOTAL_NUMBER_OF_REASSIGNMENTS IS NULL 
AND h.FIRST_ASSGN_DT IS NOT   NULL   THEN 'NewlyAssigned'  
ELSE 'ReAssigned'
END ASSIGNED_STATUS 

表:

ID    Total_Number_Reassignment  Most_Recent_Assignment    StartDate    *Assigned Status   
1          2                           11/01/2016           08/1/2017      ReAssigned
2          3                           08/02/2017           08/01/2017     ReAssigned
3          0                                                08/15/2017     NewlyAssigned   
4          5                           12/01/2016           09/01/2017     ReAssigned

【问题讨论】:

    标签: sql oracle11g


    【解决方案1】:

    Oracle 中的日期范围可以通过使用BETWEEN 来完成。

    如果列类型为DATE,那么您可以这样做:WHERE TRUNC(Most_Recent_Assignment) BETWEEN TO_DATE('2017-08-01') AND TO_DATE('2017-08-31')

    注意:TRUNC 会将日期截断为午夜,因此您不会丢失基于时间的结果。

    编辑: OP 澄清了他的问题。

    要计算特定月份的发生次数,您可以按月份分组。

    SELECT 
        TO_CHAR('Most_Recent_Assignment', 'mm'),
        COUNT(TO_CHAR('Most_Recent_Assignment', 'mm'))
    FROM TABLE
    WHERE ...
    GROUP BY TO_CHAR('Most_Recent_Assignment', 'mm')
    

    TO_CHAR 将日期解析为字符串。 mm 将返回一个两位数的月份。您可以将其替换为 Month 以获取月份的名称。

    小组将把所有月份放在一起。

    【讨论】:

    • 我需要能够捕获所有结果,而不仅仅是 8 月。所以创建一个 Where 子句来限制我的结果是行不通的。
    猜你喜欢
    • 2011-01-03
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 2013-12-06
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    • 2013-06-17
    相关资源
    最近更新 更多