( 続き )
SELECT min( ymd ) As d_from
, max( ymd ) As d_to
FROM
(
SELECT x.ymd
, count(1) As n
FROM q_ymdlist x
, q_ymdlist y
WHERE x.ymd >= y.ymd
GROUP BY x.ymd
) q
GROUP BY ymd - n ;
q_fromto
d_from | d_to |
---|---|
2021/08/11 | 2021/08/12 |
2021/08/23 | 2021/08/23 |
SELECT x.d_from
, x.d_to
, max( iif( y.終了日 Is Null, y.開始日 ) ) As high
, max( y.開始日 ) As low
FROM q_fromto x
LEFT JOIN 単価マスタ y
ON (
(
x.d_from > y.開始日
AND
y.開始日 >= dateserial( year( date() ), month( date() ), 1 )
)
)
GROUP BY x.d_from
, x.d_to ;
q_highlow
d_from | d_to | high | low |
---|---|---|---|
2021/08/11 | 2021/08/12 | 2021/08/01 | 2021/08/05 |
2021/08/23 | 2021/08/23 | 2021/08/13 | 2021/08/20 |
SELECT x.d_from
, x.d_to
, y.開始日 As 基準開始日
, 1 As 補填行
, y.単価
FROM q_highlow x
, 単価マスタ y
WHERE cdate( nz( x.high, x.low ) ) = y.開始日 ;
q_union
d_from | d_to | 基準開始日 | 補填行 | 単価 |
---|---|---|---|---|
2021/08/11 | 2021/08/12 | 2021/08/01 | 1 | 150 |
2021/08/23 | 2021/08/23 | 2021/08/13 | 1 | 100 |
SELECT 開始日 As 指定開始日
, 終了日 As 指定終了日
, 開始日 As 基準開始日
, 0 As 補填行
, 単価
FROM q_base
UNION ALL
SELECT d_from
, d_to
, 基準開始日
, 補填行
, 単価
FROM q_union
ORDER BY 1 ;
q_result
指定開始日 | 指定終了日 | 基準開始日 | 補填行 | 単価 |
---|---|---|---|---|
2021/08/01 | 2021/08/04 | 2021/08/01 | 0 | 150 |
2021/08/05 | 2021/08/10 | 2021/08/05 | 0 | 120 |
2021/08/11 | 2021/08/12 | 2021/08/01 | 1 | 150 |
2021/08/13 | 2021/08/19 | 2021/08/13 | 0 | 100 |
2021/08/20 | 2021/08/22 | 2021/08/20 | 0 | 140 |
2021/08/23 | 2021/08/23 | 2021/08/13 | 1 | 100 |
2021/08/24 | 2021/08/27 | 2021/08/24 | 0 | 15 |
2021/08/28 | 2099/12/31 | 2021/08/28 | 0 | 30 |
通報 ...