kintoneの絞り込み機能を使って、期間のある予定を絞り込む方法

今回の目標は、kintoneに登録している「期間のある予定」を「期間」で絞り込むこと！です。


ですがその前に絞り込み機能の使い方の紹介をします👀✨✨
分かるよ！って方は[予定を期間で絞り込む](#予定を期間で絞り込む)まで飛ばしてね。


# アプリとレコードの準備
アプリのフィールドは「氏名」、「性別」、「生年月日」のみ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/3a4773bf-f070-5cf0-7e05-d2d099c31ffa.png)



データは架空の個人情報を生成するサービスを使用しました。

https://testdata.userlocal.jp/




# 絞り込み機能の使い方
絞り込み機能は、アプリのココをクリックして使います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/609d5d97-3e50-a7af-e6cd-a453f0f2a5fd.png)


## 性別でレコードを絞り込む
「女の人」で絞り込むにはこんな感じ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/1b297b0b-6d39-bca1-6817-52a0c85946d8.png)

## 生年月日で絞り込む
**👀生年月日の西暦が1995年の人を絞り込むには**
1995年生まれということは、
「1995-01-01～1995-12-31」の間に生まれたということです。

条件を2つ設定します。

* 生年月日>="1995-01-01"
* 生年月日<="1995-12-31"

この2つの条件の両方を満たす生年月日を絞り込むので、
「すべての条件を満たす」を選択して「適用ボタン」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/1b7522ff-f014-4a97-36c5-fcd06c7b4c0f.png)

**👀他の指定方法**
↓「1995-01-01～1995-12-31」は、こんな方法でも指定できます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/782099ca-3b92-dfb9-74b6-615457ee0356.png)

##性別と生年月日で絞り込む
「男の人」かつ、「1980年代（1980-01-01 ~ 1989-12-31）生まれの人」を絞り込むには

まず、

* 性別=男
* 生年月日>="1980-01-01"
* 生年月日<"1990-01-01"

の3つの条件を設定します。

「AかつB」という条件は、`AとBの条件をどちらも満たす`という意味なので、
「すべての条件を満たす」を選択して適用ボタンをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/4ca4e292-ca70-2dfc-a519-a8cfd32406dd.png)

**👀「女の人」または、「1980年1月1日よりも前に生まれた人」を絞り込むには**

まず条件を設定します。

* 性別=女
* 生年月日<"1980-01-01"

「AまたはB」という条件は、`A、Bのどちらかの条件を満たす`という意味なので、
「いずれかの条件を満たす」を選択して適用ボタンをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/30502f10-c891-2cb5-320d-f96ec5d65e34.png)

##「女の人」または「1980年代（1970-01-01 ~ 1979-12-31）生まれの人」を絞り込むには？（応用編）

女の人だったら生年月日を問わず、性別が女以外なら生年月日は1970年代の人を絞り込むという条件です。

条件の設定をしてみましょう

* 性別=女
* 生年月日>="1970-01-01"
* 生年月日<"1980-01-01"

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/c723b5b7-feae-77aa-bdff-5121aed908d0.png)

ここまでは入力できると思いますが、
絞り込みたい条件は

「性別=女」
**または**
「生年月日>="1970-01-01"」　**かつ** 「生年月日<"1980-01-01"」

のように、「または」と「かつ」が混在しています。
「または」と「かつ」が混在する条件は絞り機能単独ではできませんが、URLのクエリを編集するとできます👀

ひとまず、「すべての条件を満たす」を選択して「適用ボタンをクリックします」
それから、URLを見るとこんな感じの部分があると思います。

`q=f5528057%20%3D%20"女"%20and%20f5528058%20<%20"1980-01-01"%20and%20f5528058%20>%3D%20"1970-01-01"`

※f5528057のfのあとの7桁の数値は環境によって違います

"女"のあとに「and」が隠れているので、そこを「or」に変えます。

`q=f5528057%20%3D%20"女"%20or%20f5528058%20<%20"1980-01-01"%20and%20f5528058%20>%3D%20"1970-01-01"`

今書き換えたorのあとの%20の後に「%28」を書きます（半角のかっこ開く`(`の意味）

`q=f5528057%20%3D%20"女"%20or%20%28f5528058%20<%20"1980-01-01"%20and%20f5528058%20>%3D%20"1970-01-01"`

一番最後、"1970-01-01"の後に「%29」を書きます（半角のかっこ閉じる`)`の意味）

`q=f5528057%20%3D%20"女"%20or%20%28f5528058%20<%20"1980-01-01"%20and%20f5528058%20>%3D%20"1970-01-01"%29`

書き換えてEnterキーをおすと、

「女の人だったら生年月日を問わず、性別が女以外なら生年月日は1970年代の人を絞り込む」という絞り込みができました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/20d53576-a538-c42d-7686-9fb5bca172a8.png)





# 予定を期間で絞り込む

では本題の、「予定」を「期間」で絞り込む方法についてです。
こんな4レコードがあります。
（※4人で全社員だと思ってね）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/944f1ce4-86c2-7e2e-f698-57b3cad8f75b.png)


この4レコードの中で、

* 9/17～9/20に予定が**ある**のは誰？
* 9/17～9/20に予定が**ない**のは誰？

という絞り込みをしてみたいと思います。
答えを思い浮かべてみてください。


## 答え

では答えです。
### 👀9/17～9/20に予定が**ある**

**開始日 <= "2021-09-20"
終了日 >= "2021-09-17"
の両方を満たす**

終了日の不等号逆だったので修正しましたm(_ _)m
ご指摘くださった、ニゴローさんありがとうございます！

### 👀9/17～9/20に予定が**ない**

**開始日 > "2021-09-20"
終了日 < "2021-09-17"
いずれかの条件を満たす**



想像した答えと同じだったでしょうか？？


# 図で考えてみる

文字だけではわかりにくいので図にしてみました。

![20210917_081011049_iOS.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/6f59443c-8c96-3921-8b42-b99c368ee1af.png)

図にしてみると、先程の問題は考えやすくなります。

* 9/17～9/20に予定が**ある**のは誰でしょう？
→太郎と社長


* 9/17～9/20に予定が**ない**のは誰でしょう？
→次郎と花子

になります。

#  9/17～9/20に予定があるのは誰でしょう

まず、

**9/17～9/20に予定があるのは誰でしょう？**

を考えてみます。

開始日が9/17、終了日が9/20でその範囲だから・・・・・
↓こうかな？と思うかもしれません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/97146172-23b1-e058-e65a-2d05699ba471.png)

**↓絞り込みの結果↓**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/836c2798-c5c5-366e-f070-4c09acf95133.png)

社長も9/17～9/20に予定があるのに表示されない！！！
この条件は間違っているようです。


**👀考えてみよう**
指定した絞り込み条件は、

開始日 >= "2021-09-17"
終了日 <= "2021-09-20"
のすべての条件を満たす

ですが、

太郎の予定は
開始日：2021-09-17 (開始日 >= "2021-09-17"を満たす)
終了日：2021-09-20 (終了日 <= "2021-09-20"を満たす)


社長の予定は
開始日：2021-09-17 (開始日 >= "2021-09-17"を満たす)
終了日：2021-09-25 (**終了日 <= "2021-09-20"を満たしていない**)

となり、社長の予定は条件を満たさず、太郎の予定のみ表示されてしまったのでした。

では、**「9/17～9/20に予定がある」の絞り込み条件**はどう設定すればよいでしょう👀💦

## またまた図で考える

開始日、終了日と、検索範囲の9/17～9/20の組み合わせを考えると、下記の5パターンあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/e7b2bf42-2f4e-23e4-3ed5-9e8ef8cc2d9d.png)

このうち、**「9/17～9/20に予定がある」**のは②、③、④の3パターンです。
この３パターンに共通している条件を考えると2つの条件が見えてきます。

**1つ目の条件**
![20210917_085125075_iOS.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/4705232f-19de-847b-716d-fa2f11ccce1a.png)

**2つ目の条件**
![20210917_085143281_iOS.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/fcece2bc-64e0-27e3-fba8-3901ffa679ac.png)


2つの条件をまとめると

**開始日 <= 9/20（検索範囲の終了）
終了日 <= 9/17（検索範囲の開始）
の両方を満たす**

となります。

## 実際にやってみよう

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/ee7829b7-3063-cf0c-e754-7683cb8cb51f.png)

**↓絞り込みの結果↓**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/8ca83168-0e60-6576-6336-ecb816898379.png)

**9/17～9/20に予定があるのは誰でしょう？**
を正しく絞り込むことができました。

# 9/17～9/20に予定がないのは誰でしょう？

実はこちらのほうが簡単でした。
図で考えてみましょう。

![20210917_090243689_iOS.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/88d7a74c-7683-e3dd-2b0c-a0bcf8302a2c.png)

※「どちらかを満たせばよい」と書きましたが、どちらも満たすことは不可能ですね。

つまり、

**開始日 > "2021-09-20"
終了日 < "2021-09-17"
いずれかの条件を満たす**

とすれば**「9/17～9/20に予定がない」**条件となります。

## 実際にやってみよう

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/36c9bf7c-dff5-ec58-512f-2ffaa494265d.png)

**↓絞り込みの結果↓**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/c01131ce-bfb0-2c76-68b7-fc42f8cb70a7.png)

正しく絞り込むことができました。

# まとめ

今回は絞り込み機能の使い方から期間で予定を絞り込む方法まで大容量になってしまいました・・・。

言いたかったことは
期間で予定を絞り込むという場合、
素直に開始日と終了日で↓こうやっちゃうと上手く絞り込めないよ！ということです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/97146172-23b1-e058-e65a-2d05699ba471.png)

条件の考え方を工夫しないといけないですが、コツを掴むと絞り込みが上手になれると思うので、
難しいかもしれないですが、レッツチャレンジです👀✨✨💪



# 発展（読み飛ばしてOKです）
このような期間について考える場合、
「9/17～9/20に予定がある」を考えるために、「9/17～9/20に予定がない」を先に考えると簡単だったりします。

**「9/17～9/20に予定がない」**条件は
**開始日 > "2021-09-20"
終了日 < "2021-09-17"
いずれかの条件を満たす**

ですが、

「ドモルガンの法則」という法則を使うと、この条件から「9/17～9/20に予定がある」の条件をすぐに求めることができます。

## ドモルガンの法則

**「A　かつ　B」　の否定は　「Aではない　または　Bではない」**
**「A　または B」　の否定は　「Aではない　かつ　Bではない」**

が成り立つという法則です。
（詳しくはググってね）


**「9/17～9/20に予定がない」**の条件である
**開始日 > "2021-09-20"
終了日 < "2021-09-17"
いずれかの条件を満たす**

を「または」という表現を使って書き換えると
**「開始日 > "2021-09-20"」 または 「終了日 < "2021-09-17"」**

となります。
さらに、

**「9/17～9/20に予定がある」**は**「9/17～9/20に予定がない」**の否定なので
**「開始日 > "2021-09-20"」 または 「終了日 < "2021-09-17"」**
は、ドモルガンの法則から
**「開始日 > "2021-09-20"　ではない」 かつ 「終了日 < "2021-09-17"　ではない」**
が成り立ちます。

「開始日 > "2021-09-20"　ではない」とは不等号を逆にしてイコールをつけて「開始日 <= "2021-09-20"」となります。
「終了日 < "2021-09-17"　ではない」とは不等号を逆にしてイコールをつけて「終了日 >= "2021-09-17"」となります。

まとめると、

**「9/17～9/20に予定がある」**は
**開始日 <= "2021-09-20"
終了日 <= "2021-09-17"
の両方を満たす**

となります。
ドモルガンの法則、結構便利なので覚えておくとイイかもです👀✨✨