0

アプリケーションには毎週繰り返されるイベントがあり、各イベントの開始時刻と終了時刻を週の初め (日曜日の午前 12 時) からの秒数として保存することにしました。これにより、クエリや並べ替えなどがはるかに簡単になります。

ただし、小さな問題が 1 つあります。週のリセットに近い時間に発生しているイベントを取得したい場合、そのイベントがそのギャップを埋める可能性があり、クエリが難しくなります。

指定された時間がレコードの開始時間と終了時間の間にあるレコードを取得するために、99% の時間で機能する通常のクエリ。

time = 216000 # Tuesday, 12:00PM
SELECT * FROM events WHERE start_time <= 216000 AND end_time > 216000

難しいのは、たとえば、土曜日の午後 11 時に開始し、日曜日の午前 2 時に終了するイベントがある場合です。

time = 3600 # Sunday, 1am
SELECT * FROM events WHERE start_time <= 3600 AND end_time > 3600

start_timeこれは、週サイクルの終わり近くに開始されるため、 が 3600 未満になることはないため、何も返されません。

私は良い解決策を考え出すために数時間頭を悩ませてきましたが、これまでのところ不十分なので、私が考えていない解決策があるかどうかを確認するためにそれを開いてみたいと思いますの。これを行うために使用できる簡単な数学の方程式があると感じていますが、数学は私の最良の科目ではありません:)

もっと詳しく説明したり、より良い例を挙げたりする必要がある場合はお知らせください。

ありがとう!

4

3 に答える 3

1

次のようなものを試すことができます:

select * from events 
   where (start_time <= 3600 or start_time>end_time) and end_time > 3600; 

このようにして、休憩時間の前に開始され、指定された時間にまだ発生しているイベントをキャッチできます。

于 2012-10-28T20:14:52.357 に答える
0

開始時間を非常に長くすることができます。

SELECT*FROMイベントWHEREstart_time<= 590000 AND end_time> 3600

于 2012-10-28T20:04:36.900 に答える
0

時間をタイムスタンプとして保存し、毎週のstart_timeを計算して、少し計算する必要があります。これにより、説明している問題が防止されます。

select * from events where (start_time < SUNDAYS_TIMESTAMP and end_time > SUNDAYS_TIMESTAMPまたはあなたが本当に試したいものは何でも。

データをユニバーサル形式で保存し、そこから何が必要かを理解する必要があります。

于 2012-10-28T20:29:38.210 に答える