【问题标题】:SQL Query Extract Totals by Month for Multiple Date FieldsSQL 查询按月提取多个日期字段的总计
【发布时间】:2020-01-17 13:50:47
【问题描述】:

我有一个 Oracle 数据库,我正在尝试按日期查询多个日期字段,并按月和年获取总计作为输出。

这是我最初的查询。这只是得到我想要输入的日期的内容。

SELECT COUNT(*) as Total
FROM Some_Table s
WHERE (s.Start_DATE <= TO_Date ('2019/09/01', 'YYYY/MM/DD'))
AND (s.End_DATE IS NULL OR (s.End_DATE > TO_Date ('2019/08/31', 'YYYY/MM/DD')))

我想得到一个输出,它可以让我按月和年计算。计数将是 Start_DATE(月初)和 End_DATE(月底)之间的数字。

我做不到

编辑:这是来自另一个查询的示例,与上述查询无关。我只是想提供一个我不能做的例子,因为我有两个单独的日期字段。下面的示例说明了我从单个日期字段中提取月份和年份的知识。很抱歉造成混乱。

SELECT extract(year from e.DATE_OCCURRED) as Year
      ,to_char(e.DATE_OCCURRED, 'MONTH') as Month
      ,count (*) as totals

因为 Start_DATE 和 End_DATE 是两个独立的字段。

任何帮助将不胜感激

编辑:示例为

----------------------------------
| Name | Start_DATE |  End_DATE  |
----------------------------------
| John | 01/16/2018 | 07/09/2019 |
| Sue  | 06/01/2015 | 09/01/2018 |
| Joe  | 04/06/2016 |    Null    |
----------------------------------

我想知道按月和按年工作的工人总数。希望输出看起来像。

------------------------
| Year | Month | Total |
------------------------
| 2016 |  Aug  |   2   |
| 2018 |  May  |   3   |
| 2019 |  Aug  |   2   |
------------------------

所以我知道我有两个工人在 2016 年 8 月工作,三个在 2018 年 5 月工作。

【问题讨论】:

  • 样本数据和期望的结果会有所帮助。
  • 什么是e,它的occurred_dates.start_dates.end_date 有什么关系?

标签: sql oracle date


【解决方案1】:

你想要这个吗?

SELECT count(*)
from some_table
where year(e.DATE_OCCURRED) > year(start_date)
  and year(e.DATE_OCCURRED) < year(end_date)
  and month(e.DATE_OCCURRED) > month(start_date)
  and month(e.DATE_OCCURRED) <  month(end_date)

注意:在处理日期时,使用月份和年份函数通常会更好。如果您转换为字符,您可能会发现一月在二月之后(例如),因为字母表中 J 在 F 之后。

【讨论】:

  • Oracle 没有year() 函数,但您可以使用extract (year from e.DATE_OCCURRED) 等代替。 OP 似乎可以隔离所涉及的行?
【解决方案2】:

你在找这个吗?(希望 end_date > start_date)

select extract (year from end_dt2)- extract(YEAR from st_dt1) as YearDiff ,
extract (month from end_dt2)- extract (month from st_dt1) as monthDiff from tab;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-18
    • 2012-10-20
    • 2015-11-18
    • 2020-04-13
    • 2013-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多