別のテーブルの2つの日付フィールドに基づいて1つのテーブルのレコード数を取得する方法

ジェイ

別のテーブルの2つの日付フィールドに基づいて1つのテーブルのレコード数を取得する方法

例:
表1:葉

| leav_id     | from      | to             |


| 1           | 2015-10-20 | 2015-10-27    |

| 2           | 2015-11-10 | 2015-10-12    |

表2:休日

| holi_id     | On         | Name       |


| 1           | 2015-12-25 | Christmas  |

取得したいnumber days between from and to in table leaves excluding the count of holidays from table holiday in that range

Abhik Chakraborty

これがあなたができる方法です、私は計算をするためにいくつかの休日を作成しました

mysql> select * from leaves ;
+---------+------------+------------+
| leav_id | from       | to         |
+---------+------------+------------+
|       1 | 2015-10-20 | 2015-10-27 |
|       2 | 2015-12-20 | 2015-12-30 |
+---------+------------+------------+
2 rows in set (0.00 sec)

mysql> select * from holidays ;
+---------+------------+----------+
| holi_id | on         | name     |
+---------+------------+----------+
|       1 | 2015-12-25 | X-Mass   |
|       2 | 2015-12-26 | Saturday |
|       3 | 2015-12-26 | Sunday   |
|       4 | 2015-10-24 | Saturday |
|       5 | 2015-10-25 | Sunday   |
+---------+------------+----------+

したがって、次のクエリは、休日を除いた葉の総数を示します。

select 
t1.leav_id,
( 
  datediff(t1.`to`,t1.`from`) 
  - 
  sum(
    case when t2.`on` >= t1.`from` and t2.`on` <= t1.`to` 
    then 1 else 0  end
  ) 
) as total_leave
from  leaves t1 
left join holidays t2 on t2.`on` >= t1.`from` 
and t2.`on` <= t1.`to` 
group by t1.leav_id 

結果は次のようになります

+---------+-------------+
| leav_id | total_leave |
+---------+-------------+
|       1 |           5 |
|       2 |           7 |
+---------+-------------+

また、datediff関数によって正しい結果が得られない場合があることにも注意してください。

mysql> select datediff('2015-12-30','2015-12-20') as d ;
+------+
| d    |
+------+
|   10 |
+------+

ここではその10日後、しかし、休暇からその11すなわち計算されたとき2015-12-20まで2015-12-30

したがって、上記のクエリをリファクタリングして、+1として追加する必要があります

select 
t1.leav_id,
( 
  datediff(t1.`to`,t1.`from`) 
  - 
  sum(
    case when t2.`on` >= t1.`from` and t2.`on` <= t1.`to` 
    then 1 else 0 end
   ) 
 )+1 as total_leave
from  leaves t1 
left join holidays t2 on t2.`on` >= t1.`from` 
and t2.`on` <= t1.`to` 
group by t1.leav_id 

そしてとして与える

+---------+-------------+
| leav_id | total_leave |
+---------+-------------+
|       1 |           6 |
|       2 |           8 |
+---------+-------------+

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

MySQLの別のテーブルのIDフィールドに基づいてテーブル内のレコードを見つける方法は?

分類Dev

別のテーブルの列の日付の間に1つのテーブルからすべてのレコードを取得する方法

分類Dev

MySQL-別のテーブルの列の数に基づいて1つのテーブルからレコードを取得します

分類Dev

mysqlの2つのテーブルのJOINに基づいて複数のフィールドを更新する

分類Dev

MySQL別のテーブルの値に基づいて1つのテーブルのフィールドを更新する方法

分類Dev

2つの日付フィールドに基づいてテーブルを要約します

分類Dev

別のテーブルのフィールドにないレコードを 1 つのテーブルから取得する方法 (3)

分類Dev

テーブルの1つのフィールドのみに基づいてLinqで区別する

分類Dev

1つのテーブルの2つのフィールドを別のテーブルの1つのフィールドに関連付ける方法

分類Dev

postgresの日付に基づいてテーブルからレコードを取得する方法

分類Dev

別のテーブルの値に基づいて列値を取得するためのクエリ、つまり、別のテーブルのフィールド名として持つ1つのテーブル値

分類Dev

日付に基づいて2つのテーブルを結合する方法

分類Dev

フィールド値の数に基づいて、1つのテーブルのレコードを他のテーブルのレコード数に変換するMysqlクエリ

分類Dev

いずれかのテーブルに特定の日付がある場合に、2つのテーブルから1つのレコードを返す方法

分類Dev

最初のテーブルレコードに基づいて2つのテーブルを結合します

分類Dev

そのテーブルの別のフィールドに基づいて、関連するテーブルのフィールドに注釈を付ける

分類Dev

SQL:2つのフィールドに基づいて、テーブルBに存在しないレコードをテーブルAから削除します

分類Dev

条件に基づいて1つのテーブルから別のテーブルにレコードを挿入するPSQLクエリ

分類Dev

EF。最初のテーブルのFKを持つ2番目のテーブルのレコードのプロパティに基づいて、1つのテーブルからレコードを選択します

分類Dev

Accessの異なるテーブルの他の2つのフィールドの値に基づいてマスターテーブルを更新する

分類Dev

2つの日付の間にSQLのテーブルからレコードをフェッチする方法

分類Dev

月フィールドに基づいてテーブルから上位3つのレコードを取得する

分類Dev

一致しない日付フィールドに基づいて2つのテーブルを結合する

分類Dev

IDに基づいて2つのテーブルをマージし、2番目のテーブルから日付値を取得する方法

分類Dev

SQLの別のテーブルの日付に基づいて1つのテーブルの数量の合計を計算する

分類Dev

別のテーブルのフィールド値としてテーブル名に基づいてテーブルからデータを取得する

分類Dev

テーブルの結合、DATEに基づく合計注文価格、および日付に固有ではない1つではなく、異なる日付レコードの2つの個別の合計の取得

分類Dev

フィールド日付に基づいてBigQueryの最新レコードを取得する方法

分類Dev

1つの列に基づいて1つのテーブルを複数のテーブルに分割する

Related 関連記事

  1. 1

    MySQLの別のテーブルのIDフィールドに基づいてテーブル内のレコードを見つける方法は?

  2. 2

    別のテーブルの列の日付の間に1つのテーブルからすべてのレコードを取得する方法

  3. 3

    MySQL-別のテーブルの列の数に基づいて1つのテーブルからレコードを取得します

  4. 4

    mysqlの2つのテーブルのJOINに基づいて複数のフィールドを更新する

  5. 5

    MySQL別のテーブルの値に基づいて1つのテーブルのフィールドを更新する方法

  6. 6

    2つの日付フィールドに基づいてテーブルを要約します

  7. 7

    別のテーブルのフィールドにないレコードを 1 つのテーブルから取得する方法 (3)

  8. 8

    テーブルの1つのフィールドのみに基づいてLinqで区別する

  9. 9

    1つのテーブルの2つのフィールドを別のテーブルの1つのフィールドに関連付ける方法

  10. 10

    postgresの日付に基づいてテーブルからレコードを取得する方法

  11. 11

    別のテーブルの値に基づいて列値を取得するためのクエリ、つまり、別のテーブルのフィールド名として持つ1つのテーブル値

  12. 12

    日付に基づいて2つのテーブルを結合する方法

  13. 13

    フィールド値の数に基づいて、1つのテーブルのレコードを他のテーブルのレコード数に変換するMysqlクエリ

  14. 14

    いずれかのテーブルに特定の日付がある場合に、2つのテーブルから1つのレコードを返す方法

  15. 15

    最初のテーブルレコードに基づいて2つのテーブルを結合します

  16. 16

    そのテーブルの別のフィールドに基づいて、関連するテーブルのフィールドに注釈を付ける

  17. 17

    SQL:2つのフィールドに基づいて、テーブルBに存在しないレコードをテーブルAから削除します

  18. 18

    条件に基づいて1つのテーブルから別のテーブルにレコードを挿入するPSQLクエリ

  19. 19

    EF。最初のテーブルのFKを持つ2番目のテーブルのレコードのプロパティに基づいて、1つのテーブルからレコードを選択します

  20. 20

    Accessの異なるテーブルの他の2つのフィールドの値に基づいてマスターテーブルを更新する

  21. 21

    2つの日付の間にSQLのテーブルからレコードをフェッチする方法

  22. 22

    月フィールドに基づいてテーブルから上位3つのレコードを取得する

  23. 23

    一致しない日付フィールドに基づいて2つのテーブルを結合する

  24. 24

    IDに基づいて2つのテーブルをマージし、2番目のテーブルから日付値を取得する方法

  25. 25

    SQLの別のテーブルの日付に基づいて1つのテーブルの数量の合計を計算する

  26. 26

    別のテーブルのフィールド値としてテーブル名に基づいてテーブルからデータを取得する

  27. 27

    テーブルの結合、DATEに基づく合計注文価格、および日付に固有ではない1つではなく、異なる日付レコードの2つの個別の合計の取得

  28. 28

    フィールド日付に基づいてBigQueryの最新レコードを取得する方法

  29. 29

    1つの列に基づいて1つのテーブルを複数のテーブルに分割する

ホットタグ

アーカイブ