![](/img/trans.png)
[英]MySQL - Get records from one table based on count of another table's column
[英]How to get unique records based on one column in mysql
我有一個表,其中多次使用subscription_id
,每個月客戶要收取一筆要使用相同數據和唯一訂單ID生成的訂單,因此有一列“ updated_at”也會更新,因此我只想獲得一(1)來自基於subscription_id的表的最新記錄,我正在使用以下查詢,但它不起作用並獲取舊記錄。
SELECT *
FROM members_subscriptions
WHERE status = 'active'
GROUP BY subscription_id
ORDER BY updated_at DESC
誰能告訴我這個查詢有什么問題....
您需要獲取updated_at
MAX()
為updated_at
,在分組后按運行順序排序,因此需要與最新日期進行比較
SELECT DISTINCT *
FROM members_subscriptions
WHERE status = 'active'
AND updated_at IN(
SELECT MAX(updated_at)
FROM members_subscriptions
GROUP BY subscription_id
)
ORDER BY updated_at DESC
要么
SELECT DISTINCT m.*
FROM members_subscriptions m
INNER JOIN (
SELECT subscription_id, MAX(updated_at) AS updated_at
FROM members_subscriptions GROUP BY subscription_id
) AS maxdatte USING (subscription_id, updated_at);
假設每個訂閱在updated_at
只能有唯一的日期,那么此查詢應給出期望的結果:
SELECT *
FROM members_subscriptions
WHERE status = 'active'
AND (subscription_id, updated_at) IN(
SELECT subscription_id, MAX(updated_at)
FROM members_subscriptions
GROUP BY subscription_id
)
ORDER BY updated_at DESC
但是,如果一個訂閱可能有多個相同的日期,則查詢必須使用唯一id
從兩個或多個具有相同日期的記錄中僅獲取一條記錄:
SELECT *
FROM members_subscriptions m
WHERE status = 'active'
AND id = (
SELECT id FROM members_subscriptions m1
WHERE m.subscription_id = m1.subscription_id
AND status = 'active'
ORDER BY updated_at DESC
LIMIT 1
)
您的查詢存在的問題是,結果首先被分組,然后才被排序。 如果需要最新結果,則需要執行以下操作:
SELECT *
FROM members_subscriptions as main
WHERE status = `active` AND `updated_at` = (
SELECT MAX(`updated_at`) FROM members_subscriptions as sub
WHERE status='active' and main.`subscription_id` = sub.`subscription_id`
)
SELECT distinct (name)
FROM members_subscriptions
WHERE status = 'active'
GROUP BY subscription_id
ORDER BY updated_at DESC
使用與要查找的字段名稱不同
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.