嗨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
答案 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