簡體   English   中英

如何基於mysql中的一列獲取唯一記錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM