私は一日中これに取り組んでいますが、それを理解することはできません.
テーブルがtrades
あり、このクエリには、テーブルの 3 つの列が含まprovider_id
れtrade_id
ますdate_close
。
その日の (指定されたプロバイダーの) 最終取引ごとに、2 日以上前に終了した前の取引を取得したい...そしてその日の最終取引でした。たとえば、次のようになります。
+-------------+----------+---------------------+
| provider_id | trade_id | date_close |
+-------------+----------+---------------------+
| 126 | 1 | 2012-10-22 14:26:57 |
| 126 | 2 | 2012-10-22 14:31:59 |
| 126 | 3 | 2012-10-23 12:39:41 |
| 126 | 4 | 2012-10-24 07:29:57 |
| 126 | 5 | 2012-10-24 08:36:19 |
| 126 | 6 | 2012-10-24 08:47:23 |
| 126 | 7 | 2012-10-25 08:30:11 |
| 126 | 8 | 2012-10-25 08:34:21 |
| 126 | 9 | 2012-10-26 08:43:12 |
| 126 | 10 | 2012-10-26 14:29:35 |
+-------------+----------+---------------------+
望ましい出力は次のようになります。
+-----------+---------------------+-----------+---------------------+
| atrade_id | adate_close | btrade_id | bdate_close |
+-----------+---------------------+-----------+---------------------+
| 6 | 2012-10-24 08:47:23 | 2 | 2012-10-22 14:31:59 |
| 8 | 2012-10-25 08:34:21 | 3 | 2012-10-23 12:39:41 |
| 10 | 2012-10-26 14:29:35 | 6 | 2012-10-24 08:47:23 |
+-----------+---------------------+-----------+---------------------+
これまでに作成したクエリは次のとおりです。
SELECT a.trade_id atrade_id, MAX(a.date_close) adate_close, b.trade_id btrade_id, MAX(b.date_close) bdate_close
FROM trades a
INNER JOIN trades b ON a.provider_id = b.provider_id
WHERE TIMESTAMPDIFF(DAY, DATE_FORMAT(b.date_close, "%Y-%m-%d"), DATE_FORMAT(a.date_close, "%Y-%m-%d")) >= 2
AND a.provider_id = 126
GROUP BY DATE_FORMAT(a.date_close, "%Y-%m-%d")
その日の最後の終値のみを取得するためLIMIT 1 DESC
に、列に を設定したかったのです。date_close
しかし、これを行う方法がわからなかったので、使用していMAX()
ます。もっと良い方法があるに違いないと思います。また、上記のクエリに近づくと、すべての結果で btrade_id が 1 として返され、atrade_id の値もオフになります。
+-----------+---------------------+-----------+---------------------+
| atrade_id | adate_close | btrade_id | bdate_close |
+-----------+---------------------+-----------+---------------------+
| 4 | 2012-10-24 08:47:23 | 1 | 2012-10-22 14:31:59 |
| 7 | 2012-10-25 08:34:21 | 1 | 2012-10-23 12:39:41 |
| 9 | 2012-10-26 14:29:35 | 1 | 2012-10-24 08:47:23 |
+-----------+---------------------+-----------+---------------------+
私が間違っていること、またはこれについてもっと良い方法について何か提案はありますか?