私は2つのテーブルを持っています(実際にはもっとたくさんありますが、それは問題ではありません):
sourcewebsite:
id - int (PK)
name - varchar
offlinethreshold - int
sourcewebsite_updatelog:
id - int (PK)
sourcewebsiteid - int (FK)
datetime_start - datetime
episodestotal - int
sourcewebsiteテーブルには、いくつかのsourcewebsiteが含まれ、offlinethresholdは、Webサイトがオフラインであることが許可されている時間を示します。
sourcewebsite_updatelogテーブルは、sourcewebsiteがチェックされるたびに新しいエントリで埋められるログテーブルです。'episodestotal'が0の場合、チェックが行われたときにWebサイトがオフラインであったことを意味します。
私が今欲しいのはこれです:私は彼らのofflinethresholdを超えたすべてのウェブサイトのリストが欲しいです。したがって、ID 1のソースWebサイトがあり、オフラインしきい値が6時間であると仮定します。このWebサイトが過去6時間に5回チェックされたと仮定しますが、チェックされるたびに「episodestotal」は0でした。これは、このWebサイトがしきい値を超えたため、オフラインと見なすことができることを意味します。
過去6時間オフラインになっているすべてのソースWebサイトを特定するための小さなSQLクエリを思いつきましたが、問題は、これらの「6時間」がハードコーディングされていることです。各ソースWebサイトの「offlinethreshold」列の値を使用したいと思います。
これは私がこれまでに思いついたクエリです:
SELECT `sourcewebsiteid`, `name`
FROM `sourcewebsite_updatelog`
JOIN `sourcewebsite`
ON `sourcewebsite_updatelog`.`sourcewebsiteid` = `sourcewebsite`.`id`
WHERE `datetime_start` > DATE_SUB(NOW(), INTERVAL 6 HOUR)
GROUP BY `sourcewebsiteid`
HAVING MAX(`episodestotal`) = 0
サンプルデータは次のとおりです。
sourcewebsite:
1 - channel 1 - 5
2 - channel 2 - 3
3 - channel 3 - 10
sourcewebsite_updatelog:
1 - 1 - 2012-09-27 12:03:05 - 1
2 - 2 - 2012-09-27 12:50:20 - 0
3 - 3 - 2012-09-27 12:51:11 - 1
4 - 1 - 2012-09-27 13:25:56 - 0
5 - 2 - 2012-09-27 13:48:34 - 0
6 - 3 - 2012-09-27 13:59:01 - 0
7 - 1 - 2012-09-27 14:23:53 - 1
8 - 1 - 2012-09-27 14:54:28 - 0
9 - 2 - 2012-09-27 15:11:40 - 0
2012-09-2715:30にデータを確認するとします。チャネル1のしきい値は5時間です。過去5時間(12:03と14:23)に2回オンラインになっているため、「オフライン」としてフラグが立てられることはありません。
チャネル2は、過去3時間の間、毎回オフラインになっているため、オフラインとしてフラグを立てる必要があります。
チャンネル3は過去10時間に1回オンラインになっているので、問題ありません。フラグは必要ありません。
誰か助けてもらえますか?