a表里有若干條記錄,需要根據姓名去重后再根據create_time取出所有同名的最新的一條
SELECT
tba.username,
tba.mobile,
tba.sex,
tba.id_card,
tba.worker_source,
c.company_name,
b.NAME,
a.STATUS
FROM
h_worker_contract a
RIGHT JOIN h_worker tba ON a.worker_id = tba.id//需要根據這個表取出我上面說的需求
LEFT JOIN t_company c ON a.company_id = c.id
LEFT JOIN h_job b ON a.job_id = b.id
請問在這個SQL的基礎上應該如何改呢
uj5u.com熱心網友回復:
就是將h_worker里的username去重后取出所有同名最新創建的一條uj5u.com熱心網友回復:
有不懂的可以問,可能我表達的不是很清楚uj5u.com熱心網友回復:
沒人會嗎。。uj5u.com熱心網友回復:
SELECT *
FROM (
SELECT
ROW_NUMBER() OVER (PARTITION BY tba.username ORDER BY create_time DESC) AS rid,
tba.username,
tba.mobile,
tba.sex,
tba.id_card,
tba.worker_source,
c.company_name,
b.NAME,
a.STATUS
FROM
h_worker_contract a
RIGHT JOIN h_worker tba ON a.worker_id = tba.id --需要根據這個表取出我上面說的需求
LEFT JOIN t_company c ON a.company_id = c.id
LEFT JOIN h_job b ON a.job_id = b.id
) AS tt
WHERE tt.rid=1
uj5u.com熱心網友回復:
mysql好像不好這么寫...
uj5u.com熱心網友回復:
真的是搞不出來uj5u.com熱心網友回復:
SELECT
tba.username,
tba.mobile,
tba.sex,
tba.id_card,
tba.worker_source,
c.company_name,
b.NAME,
a.STATUS
FROM
(select * from h_worker_contract d
where not exists (select 1 from h_worker_contract where d.worker_id=worker_id and create_time>d.create_time)) as a
RIGHT JOIN h_worker tba ON a.worker_id = tba.id//需要根據這個表取出我上面說的需求
LEFT JOIN t_company c ON a.company_id = c.id
LEFT JOIN h_job b ON a.job_id = b.id
uj5u.com熱心網友回復:
mysql高版本, 也就是8.0+可以有類似的寫法。低的就得想其它辦法了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/49556.html
標籤:基礎類
上一篇:sql資料庫儲存程序帶引數
下一篇:JAVA
