2

Redshift を使用して、今月の残りの営業日数を確認する方法を見つけたいと考えています。現在、友人が作成した MySQL バージョンを持っています。それがどのように書かれたのか、他の方言に翻訳することさえ十分に知りません. しかし、誰かがそれを翻訳するのを助けることができれば、これは非常に便利なツールになるでしょう!

networkdays()出力は、Excelの関数と同じように機能するはずです。この関数では、begin_date と end_date が関数の引数として提供されます。開始日から終了日までの営業日数 (週末以外の暦日) を包括的に計算します。

現在の MySQL は次のとおりです。

SELECT 1 AS pk ,COUNT(*) AS remaining
FROM (
    SELECT WEEKDAY(DATE(DATE_FORMAT(CONVERT_TZ(NOW(), 'UTC', 'PST8PDT'), '%Y-%m-01') + INTERVAL (a.num-1) DAY)) AS weekdays
        FROM (
        SELECT @row := @row + 1 AS num
        FROM schema.table t, (SELECT @row := 0) r
    ) a
        WHERE a.num >= DAY(CONVERT_TZ(NOW(), 'UTC', 'PST8PDT'))
        AND a.num <= DAY((DATE_FORMAT(CONVERT_TZ(NOW(), 'UTC', 'PST8PDT'), '%Y-%m-01') + INTERVAL 1 MONTH) - INTERVAL 1 DAY)
) b
WHERE b.weekdays NOT IN (0,6)

どんな助けでも素晴らしいでしょう!

4

4 に答える 4

0

関数は必要ありません。単一の SQL ステートメントでこれを行うことができます。

SELECT count(*)
FROM generate_series(CURRENT_TIME,
                     date_trunc('month', CURRENT_TIME) + interval '1 month - 1 day',
                     interval '1 day') days(d)
WHERE extract(dow from d) NOT IN (0, 6);

もちろん、必要に応じてこれを SQL 関数でラップすることもできます。当月の残りの稼働日の要件を考慮して、パラメーターを指定する必要はありません。

于 2016-03-19T00:45:07.433 に答える
0

データ ウェアハウスの一般的なアイデアは、calendar次のようなフラグと共に、すべての日付 (または少なくとも会社に関連する日付) を含むテーブルを作成することです。

  • 祝日
  • 勤務日
  • 月の最初の (勤務) 日
  • 月の最後の (勤務) 日
  • 月番号
  • 週番号
  • 曜日番号

これらの値の多くは日付関数を使用して計算できますが、多くの場合、calendarテーブルに結合して日付関数を実行する方が簡単な場合があります。

残りの営業日数を計算する場合は、フラグが設定されcalendarている目的の範囲内にあるテーブル内の行数をカウントするだけです。is_work_dayこれは、またはサブクエリを介して実行できJOINます。

これらのクエリの一部ほど派手ではありませんが、多くの場合、維持するのははるかに簡単です。また、Amazon Redshift はこの機能をサポートしていないため、generate_series多くの場合、それがすべて可能です。

以下も参照してください。

于 2016-03-19T03:35:56.460 に答える