我正在嘗試編寫一個查詢,該查詢查找具有特定代碼的人員最近一段時間(年),但如果他們有另一段時間代碼與最新的時期(年)。我會明白,所以我的例子是有道理的。編寫查詢以包含某些值但在查找最新時間段時排除其他值
我希望擁有代碼A1,A2,A3,A4,A5而不是AG,AP,AQ的人。有些人在一段時間內(如2014年)擁有A1代碼,並且在同一時期擁有AG代碼。我想排除他們。並非每個人都有代碼,因此字段值可能爲NULL
。
有沒有一種方法可以用不同的方式表達這個(比如少個字符)呢?
SELECT
people.firstName
FROM
people
WHERE EXISTS (
SELECT *
FROM codes
WHERE
codes.people_id = people.id
AND period = (SELECT MAX(period) FROM codes codes2 WHERE codes2.people_id = codes.people_id)
AND code LIKE 'A[1-5]'
)
AND NOT EXISTS (
SELECT *
FROM codes
WHERE
codes.people_id = people.id
AND period = (
SELECT MAX(period)
FROM codes codes2
WHERE codes2.people_id = codes.people_id
)
AND code LIKE 'A[GPQ]'
)
架構如下:
人民
- ID(PK)
- 的firstName
代碼
- people_id(FK)與People的多對一關係表
- 代碼(例如, 「A1」, 「A2」, 「公司」)
- 時期(如 「2013」, 「2014」)
您的查詢是否提供了正確的結果? –
你能否提供涉及的模式? –
我的查詢確實給了我正確的結果,但我想知道如果我可以用更有效的方式寫它。 – user3473043