1

なかなか手がつけられない問題に取り組んでいます。たとえば、単純な MySQL Select クエリで結果を取得するとします。

SELECT date_from.rights, date_to.rights FROM rights

テーブルrightsには、ユーザーがアクセスする必要があるシステムのアクセス許可を記述するレコードが保持されます。

アクセス許可は、明らかに FROM と TO の時間値によって制限されます。date_fromまたはが NULL の場合date_to、パーミッションは (時間的に) 無制限です。

テーブル権限には次のデータが含まれます。

デートから 。. . . . . . . . date_to

2011-05-20 . . . . . . . . . 2011-08-20
2011-06-20 . . . . . . . . . NULL
2011-03-20 . . . . . . . . . 2011-04-20
NULL .. . . . . . . . . . . . . 2011-01-20

SELECT クエリで本当に取得する必要があるのは、次のとおりです。

デートから 。. . . . . . . . date_to

2011-05-20 . . . . . . . . . NULL
2011-03-20 . . . . . . . . . 2011-04-20
NULL .. . . . . . . . . . . . . 2011-01-20

このすべてが意味することを理解していただければ幸いです。すべての単一の日付値が交差する場所で、可能な限り幅広い期間限定のアクセス許可を取得するために、結果をグループ化する必要があります;)

GROUP BY 句でうまくいくと思いますが、正しい式が見つかりません。また、できれば手続きは避けたいです。

4

1 に答える 1

0

これがあなたが探しているものだと思います:

select *
from rights
where (date_from is null or date_from <= now())
and (date_to is null or date_to >= now())

幸運を。

于 2011-05-05T00:40:24.780 に答える