生成两个日期之间的分钟列表(SQL)

时间:2019-12-18 10:01:15

标签: sql oracle

嗨stackoverflow社区,

我想实现以下目标。

我目前有tbl1。但是我想在dt_sta_cet和dt_sto_cet之间实现恒定的数据流(请参见所需表) 以及在一行的dt_sto_cet和下一行的dt_sta_cet之间的恒定数据流。

Tbl1

id  dt_sta_cet        dt_sto_cet         s_t
1   2019-12-13 09:00  2019-12-13 09:05    DT
1   2019-12-13 09:10  2019-12-13 09:14    DT
1   2019-12-13 09:17  2019-12-13 09:20    DT

Tbl1(需要)

id  dt                   s_t    u_t
1   2019-12-13 09:00      DT    null
1   2019-12-13 09:01      DT    null
1   2019-12-13 09:02      DT    null
1   2019-12-13 09:03      DT    null
1   2019-12-13 09:04      DT    null
1   2019-12-13 09:05      DT    null
1   2019-12-13 09:06      null   Y
1   2019-12-13 09:07      null   Y
1   2019-12-13 09:08      null   Y
1   2019-12-13 09:09      null   Y
1   2019-12-13 09:10      DT     Y
1   2019-12-13 09:11      DT     Y

编辑:

要获取Dt_sta_cet / dt_sto_cet时间,我有以下查询。

    With tbl1 as ( select d.a_s_t, mach.a_id,

 to_char(to_date(f.f_sto_sta_dt_id,'YYYYMMDD') + (f.f_sto_sta_time_id/86400),
    'YYYY-MM-DD HH24:MI:SS') as sto_sta_dt
    ,to_char(to_date(f.f_sto_sto_dt_id,'YYYYMMDD') + (f.f_sto_sto_time_id/86400),
    'YYYY-MM-DD HH24:MI:SS') as sto_sto_dt

    from f_sto f
    left join d_sto d on f.f_sto_id= d.k_id
    left join d_mach mach on f.f_mach_id=mach.k_id
    where d.a_s_t = 'DT')

    select tbl1.a_id, tbl1.sto_sta_dt, tbl1.sto_sto_dt, tbl1.a_s_t,
    to_char(to_date(st_sta_dt, 'YYYY-MM-DD HH24:MI:SS')-1/24, 'YYYY-MM-DD HH24:MI:SS' as dt_sta_cet
    , to_char(to_date(st_sto_dt, 'YYYY-MM-DD HH24:MI:SS')-1/24, 'YYYY-MM-DD HH24:MI:SS' as dt_sto_cet 

2 个答案:

答案 0 :(得分:1)

我不确定预期结果中的u_t

但是要生成所有会议记录,您可以使用类似以下内容(在MT0注释后更新):

SQL> WITH DATAA (ID, DT_STA_CET, DT_STO_CET,S_T) AS
  2  (
  3  SELECT 1, TO_DATE('2019-12-13 09:00','YYYY-MM-DD HH24:MI'),TO_DATE('2019-12-13 09:05','YYYY-MM-DD HH24:MI'),'DT' FROM DUAL UNION ALL
  4  SELECT 1, TO_DATE('2019-12-13 09:10','YYYY-MM-DD HH24:MI'),TO_DATE('2019-12-13 09:14','YYYY-MM-DD HH24:MI'),'DT' FROM DUAL UNION ALL
  5  SELECT 1, TO_DATE('2019-12-13 09:17','YYYY-MM-DD HH24:MI'),TO_DATE('2019-12-13 09:20','YYYY-MM-DD HH24:MI'),'DT' FROM DUAL
  6  ),
  7  CTE(ID, DT) AS (
  8      SELECT ID, START_DT + ( column_value - 1 ) / 1440 AS DT
  9      FROM
 10          (
 11              SELECT
 12                  ID,
 13                  MIN(DT_STA_CET) AS START_DT,
 14                  MAX(DT_STO_CET) AS END_DT
 15              FROM DATAA
 16              GROUP BY ID
 17          )
 18          cross join 
 19       table(cast(multiset(select level from dual
 20                           connect by level <= ( END_DT - START_DT ) * 1440 + 1
 21                          ) as sys.odcinumberlist))
 22  )
 23  SELECT
 24          C.ID, C.DT, D.S_T
 25  FROM
 26      CTE C
 27      LEFT JOIN DATAA D ON ( C.DT BETWEEN D.DT_STA_CET AND D.DT_STO_CET
 28                             AND C.ID = D.ID )
 29  ORDER BY C.DT;

结果:

        ID DT                S_
---------- ----------------- --
         1 13-dec-2019 09:00 DT
         1 13-dec-2019 09:01 DT
         1 13-dec-2019 09:02 DT
         1 13-dec-2019 09:03 DT
         1 13-dec-2019 09:04 DT
         1 13-dec-2019 09:05 DT
         1 13-dec-2019 09:06
         1 13-dec-2019 09:07
         1 13-dec-2019 09:08
         1 13-dec-2019 09:09
         1 13-dec-2019 09:10 DT
         1 13-dec-2019 09:11 DT
         1 13-dec-2019 09:12 DT
         1 13-dec-2019 09:13 DT
         1 13-dec-2019 09:14 DT
         1 13-dec-2019 09:15
         1 13-dec-2019 09:16
         1 13-dec-2019 09:17 DT
         1 13-dec-2019 09:18 DT
         1 13-dec-2019 09:19 DT
         1 13-dec-2019 09:20 DT

21 rows selected.

SQL>

干杯!

答案 1 :(得分:1)

使用解析函数和递归子查询的版本,不需要自我联接(可能会两次读取表/索引):

Oracle设置

// Define HERE the accepted statuses of that orders 
$order_statuses = array('wc-completed');

// Define HERE the customer ID
$customer_user_id = get_current_user_id(); // current user ID here for example

// Getting current customer orders
$customer_orders = wc_get_orders( array(
    'meta_key' => '_customer_user',
    'meta_value' => $customer_user_id,
    'post_status' => $order_statuses,
    'numberposts' => -1
) );   

// Loop through each customer WC_Order objects
foreach($customer_orders as $order ){

    $order = new WC_Order($order->get_id());
    $items = $order->get_items();

    // Loop through each item of the order
    foreach ( $items as $item ) {
        $product_variation_id = $item['variation_id'];

        if ($product_variation_id) { // IF Order Item is Product Variantion then get Variation Data instead
            $product = wc_get_product($item['variation_id']);
        } else {
            $product = wc_get_product($item['product_id']);
        }

        if ($product) { // Product might be deleted and not exist anymore    
            $sku = $product->get_sku();             
            echo "<p>SKU: " . $sku . "</p>";                
        }  
    }    
}

查询

CREATE TABLE Tbl1 ( id, dt_sta_cet, dt_sto_cet, s_t ) AS
SELECT 1, DATE '2019-12-13' + INTERVAL '09:00' HOUR TO MINUTE, DATE '2019-12-13' + INTERVAL '09:05' HOUR TO MINUTE, 'DT' FROM DUAL UNION ALL
SELECT 1, DATE '2019-12-13' + INTERVAL '09:10' HOUR TO MINUTE, DATE '2019-12-13' + INTERVAL '09:14' HOUR TO MINUTE, 'DT' FROM DUAL UNION ALL
SELECT 1, DATE '2019-12-13' + INTERVAL '09:17' HOUR TO MINUTE, DATE '2019-12-13' + INTERVAL '09:20' HOUR TO MINUTE, 'DT' FROM DUAL UNION ALL
SELECT 2, DATE '2019-12-13' + INTERVAL '09:00' HOUR TO MINUTE, DATE '2019-12-13' + INTERVAL '09:05' HOUR TO MINUTE, 'DT' FROM DUAL;

输出

ID | DT                  | S_T  | U_T 
-: | :------------------ | :--- | :---
 1 | 2019-12-13 09:00:00 | DT   | null
 1 | 2019-12-13 09:01:00 | DT   | null
 1 | 2019-12-13 09:02:00 | DT   | null
 1 | 2019-12-13 09:03:00 | DT   | null
 1 | 2019-12-13 09:04:00 | DT   | null
 1 | 2019-12-13 09:05:00 | DT   | null
 1 | 2019-12-13 09:06:00 | null | Y   
 1 | 2019-12-13 09:07:00 | null | Y   
 1 | 2019-12-13 09:08:00 | null | Y   
 1 | 2019-12-13 09:09:00 | null | Y   
 1 | 2019-12-13 09:10:00 | DT   | Y   
 1 | 2019-12-13 09:11:00 | DT   | Y   
 1 | 2019-12-13 09:12:00 | DT   | Y   
 1 | 2019-12-13 09:13:00 | DT   | Y   
 1 | 2019-12-13 09:14:00 | DT   | Y   
 1 | 2019-12-13 09:15:00 | null | Y   
 1 | 2019-12-13 09:16:00 | null | Y   
 1 | 2019-12-13 09:17:00 | DT   | Y   
 1 | 2019-12-13 09:18:00 | DT   | Y   
 1 | 2019-12-13 09:19:00 | DT   | Y   
 1 | 2019-12-13 09:20:00 | DT   | Y   
 2 | 2019-12-13 09:00:00 | DT   | null
 2 | 2019-12-13 09:01:00 | DT   | null
 2 | 2019-12-13 09:02:00 | DT   | null
 2 | 2019-12-13 09:03:00 | DT   | null
 2 | 2019-12-13 09:04:00 | DT   | null
 2 | 2019-12-13 09:05:00 | DT   | null

db <>提琴here

相关问题