我整天都在四处寻找和研究这个,但就是想不通。
我有一个表trades
,这个查询涉及表上的 3 列:provider_id
, trade_id
, date_close
.
对于当天(指定提供商)的每一笔最终交易,我想获得前两天或更早结束的交易......并且是当天的最终收盘交易。例如,从此:
+-------------+----------+---------------------+
| 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 |
+-----------+---------------------+-----------+---------------------+
关于我做错了什么的任何建议,或者我可以解决这个问题的更好方法?