MySQL查询以满足特定需求

时间:2015-03-30 08:02:35

标签: mysql

我的表格如下:

-------------------------------------------
| rec_id | A_id  | B_id  |Date(YYYY-MM-DD)|
-------------------------------------------
| 1      | 1     | 6     | 2014-01-01     |
| 2      | 5     | 1     | 2014-01-02     |
| 3      | 2     | 6     | 2015-01-03     |
| 4      | 6     | 1     | 2014-01-04     |
| 5      | 7     | 1     | 2014-01-05     |
| 6      | 3     | 6     | 2014-01-06     |
| 7      | 8     | 1     | 2014-01-07     |
| 8      | 4     | 6     | 2014-01-08     |
| 9      | 9     | 1     | 2014-01-09     |
| 10     | 10    | 21    | 2014-01-10     |
| 11     | 12    | 21    | 2014-01-11     |
| 12     | 11    | 2     | 2014-01-12     |
| 13     | 1     | 1     | 2014-12-31     |
| 14     | 2     | 2     | 2014-12-31     |
| 15     | 1     | 1     | 2015-01-31     |
| 16     | 10    | 21    | 2015-01-31     |
| 17     | 1     | 21    | 2014-10-31     |

此表表示拥有各种“A_id”到特定“B_id”及其拥有日期。每个“A_id”的拥有可以在以后随时更改。这意味着只考虑最新的占有权。

我想找出目前拥有特定“B_id”的所有“A_id”(在最近的日期拥有)。例如,对于“B_id”= 6,目前拥有的“A_id”如下:

---------------------------
| A_id | Date(YYYY-MM-DD) |
---------------------------
| 2    | 2015-01-03       |
| 3    | 2014-01-06       |
| 4    | 2014-01-08       |

同样,对于“B_id”= 21,目前所拥有的“A_id”如下:

---------------------------
| A_id | Date(YYYY-MM-DD) |
---------------------------
| 10   | 2015-01-31       |
| 12   | 2014-01-11       |

我非常感谢你在这方面的帮助。

1 个答案:

答案 0 :(得分:0)

实现此目的的一种方法是使用相关的not exists谓词,以确保每个A_ID与其他B_ID之后不存在任何后续拥有。

SELECT A_ID, MAX(PDATE) AS DATE 
FROM YOUR_TABLE T
WHERE B_ID = 6
AND NOT EXISTS (
    SELECT 1 
    FROM YOUR_TABLE
    WHERE A_ID = T.A_ID 
      AND PDATE > T.PDATE 
      AND B_ID <> T.B_ID
    )
GROUP BY A_ID