Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何按ISO周排序并从今天的周数开始_Sql_Oracle - Fatal编程技术网

Sql 如何按ISO周排序并从今天的周数开始

Sql 如何按ISO周排序并从今天的周数开始,sql,oracle,Sql,Oracle,我想从oracle查询数据并按周排序,但结果是从第52周开始,现在实际上是第44周。 这是我的sql: SELECT * FROM (SELECT to_char(contract.MIGRATION_SUCCESS_DATE,'yyyy-iw') metric, sum(contract.BLIS_MRR) mrr, count(contract.CONTRACT_ID) coun

我想从oracle查询数据并按周排序,但结果是从第52周开始,现在实际上是第44周。 这是我的sql:

SELECT *
FROM (SELECT
        to_char(contract.MIGRATION_SUCCESS_DATE,'yyyy-iw') metric,
        sum(contract.BLIS_MRR)                    mrr,
        count(contract.CONTRACT_ID)               count
      FROM (SELECT DISTINCT
              CONTRACT_ID,
              BLIS_MRR,
              MIGRATION_SUCCESS_DATE
            FROM MR_MIGRATION_SITE) contract WHERE MIGRATION_SUCCESS_DATE < sysdate
      GROUP BY to_char(contract.MIGRATION_SUCCESS_DATE,'yyyy-iw'))
ORDER BY metric DESC;
下图是结果:

当日期和该日期所在周的星期一在不同年份时,您会遇到问题

要解决此问题,您可以使用和IYY iw格式获取ISO年和周:

TO_CHAR( contract.MIGRATION_SUCCESS_DATE, 'IYYY-IW' )
初始不正确的解决方案:

要解决此问题,您可以将日期截断为ISO周的开始,然后将其转换为yyyy iw格式:

例如:

Oracle 11g R2架构设置:

问题1:

:


我认为您必须使用格式来保存合同。迁移成功日期,'iyy-iw'

ISO周的年份可以不同于实际年份,例如2017年1月1日是2016年的第52周,即根据ISO定义为2016-W52

我建议使用格式“iyy-Wiw”,它符合


也许可以将您的GROUP BY子句更改为GROUP BY TRUNCcontract.MIGRATION_SUCCESS_DATE,'iw'

其中MIGRATION_SUCCESS_DATETO_CHAR( TRUNC( contract.MIGRATION_SUCCESS_DATE, 'IW' ) 'yyyy-iw' )
CREATE TABLE test_data( dt ) AS
SELECT DATE '2016-12-31' FROM DUAL UNION ALL
SELECT DATE '2017-01-01' FROM DUAL UNION ALL
SELECT DATE '2017-01-02' FROM DUAL UNION ALL
SELECT DATE '2014-12-31' FROM DUAL;
SELECT dt,
       TO_CHAR( dt, 'iyyy-iw' ) AS trunc_iw,
       TO_CHAR( TRUNC( dt, 'IW' ), 'yyyy-iw' ) AS trunc_iw2,
       TO_CHAR( dt, 'yyyy-iw' ) AS non_trunc_iw
FROM   test_data
|                   DT | TRUNC_IW | TRUNC_IW2 | NON_TRUNC_IW |
|----------------------|----------|-----------|--------------|
| 2016-12-31T00:00:00Z |  2016-52 |   2016-52 |      2016-52 |
| 2017-01-01T00:00:00Z |  2016-52 |   2016-52 |      2017-52 |
| 2017-01-02T00:00:00Z |  2017-01 |   2017-01 |      2017-01 |
| 2014-12-31T00:00:00Z |  2015-01 |   2014-01 |      2014-01 | -- initial version is incorrect for this date