簡體   English   中英

每個ID僅選擇一個條目

[英]Select only one entry per ID

我正在使用一個會定期更新自身的系統,在這個系統中,我嘗試選擇最高的500個並列​​出它們。 但是,問題是我按包含日期為2013-07-08的日期的varchar對其進行排序,這是一個遺物,暫時不方便將其更改為適當的日期,以方便排序。

我的問題是,如何從以下3個偽裝結果中僅選擇1個?

id | 價值| ownerid | 日期

1| 21300 | 1       | 2013-07-08
2| 21300 | 1       | 2013-07-08
3| 21300 | 1       | 2013-07-08

我需要做的是從每個ownerid中選擇一個條目,該條目是具有最高值的條目(如果相同,那么實際上哪個條目都不重要,只是它只是一個!)

這使用帶有PDO作為數據庫層的mysql數據庫。

感謝您提供的所有幫助!

使用帶有GROUP BY的子查詢來獲取每天的特定ID(例如,最大或最小),然后將其與表進行JOIN以獲得其余的詳細信息:

SELECT a.id, a.value, a.ownerid, a.date
FROM SomeTable a
INNER JOIN
(
    SELECT date, MAX(id) AS MaxId
    FROM SomeTable
    GROUP BY date
) b
ON a.date = b.date
AND a.id = b.MaxId

修改版本以獲取每天的最高價值行。 由於值不是唯一的,因此我進行了進一步的子選擇,以獲取該最高值的最高ID。 沒有這個,您可能會在一天內返回多行。 如果其他值彼此不同的可能性為零,則可以使用DISTINCT刪除倍數,但通常無法確定。

SELECT a.id, a.`value`, a.ownerid, a.`date`
FROM SomeTable a
INNER JOIN
(
    SELECT `date`, MAX(`value`) AS MaxVal
    FROM SomeTable
    GROUP BY `date`
) b
ON a.`date` = b.`date`
AND a.`value` = b.MaxVal
INNER JOIN
(
    SELECT `date`, `value`, MAX(id) AS MaxId
    FROM SomeTable
    GROUP BY `date`, `value`
) c
ON b.`date` = c.`date`
AND b.MaxVal = c.`value`
AND a.id = c.MaxId
SELECT * 
FROM [table] 
ORDER BY STR_TO_DATE(yourdatefield, '%m/%d/%Y') DESC 
LIMIT 5

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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