私はこのクエリを書きました、それは私が望むほとんどのことをします:
SELECT * FROM
(
SELECT COUNT(*) as cnt,
lat,
lon,
elev,
GROUP_CONCAT(CONCAT(usaf,'-',wban))
FROM `ISH-HISTORY_HASPOS`
GROUP BY lat,lon,elev
) AS x WHERE cnt >=1;
出力:
+-----+--------+----------+--------+-------------------------------------------------+
| cnt | lat | lon | elev | GROUP_CONCAT(CONCAT(usaf,'-',wban)) |
+-----+--------+----------+--------+-------------------------------------------------+
| 4 | 30.478 | -87.187 | 36 | 722220-13899,722221-13899,722223-13899,999999-13899 |
| 4 | 36.134 | -80.222 | 295.7 | 723190-93807,723191-93807,723193-93807,999999-93807 |
| 5 | 37.087 | -84.077 | 369.1 | 723290-03849,723291-03849,723293-03849,724243-03849,999999-03849 |
| 5 | 38.417 | -113.017 | 1534.1 | 745200-23176,745201-23176,999999-23176,724757-23176,724797-23176 |
| 4 | 40.217 | -76.851 | 105.8 | 999999-14751,725110-14751,725111-14751,725118-14751 |
+-----+--------+----------+--------+-------------------------------------------------+
これは、同じ座標にあるステーションの連結リストを返します。ただし、隣接する日付範囲を持つステーションを連結することにのみ関心があります。(ISH-HISTORY_HASPOS) から選択したテーブルには、「開始」と「終了」の 2 つの日時列があります。GROUP_CONCAT 条件を満たすには、これら 2 つの列の値が互いに 3 日以内である必要があります。
編集:最終結果の GROUP_CONCAT にステーションを含めるには、次の条件を満たす必要があります。
リスト内の別のステーションと同じ場所に配置する必要があります (緯度、経度、高度でグループ化)
その
end
時間は、別のステーションの時間から 3 日以内である必要があります。begin
または、別のステーションの時間begin
から 3 日以内である必要がありますend
。「別の駅」と言うときは、同じ場所にある (#1 の条件を満たしている) 駅を指しています。
サブクエリを使用する必要があると思いますが、その方法がわかりません。いくつかの助けをいただければ幸いです。クエリまたはストアド プロシージャのいずれかが優れていますが、php ソリューションも受け入れられます。
これは、クエリを実行しているテーブルのダンプです: sql dump
結果は私の例と同じに見えるはずですが、隣接していないアイテム (日付単位) は存在しないはずです。