0

通常、SELECT MAX(datetime) と GROUP BY(page_ID) を使用して最新のページを取得しますが、ここで機能しない理由がわかりません。

次のクエリは、行 ID 75 と 77 のみを選択する必要がありますが、 75 と 76 を選択します。 ここに画像の説明を入力

SELECT ru.page_ID AS id, 
    pFrom.name AS name,
    UNIX_TIMESTAMP(ru.rating_time) AS action_date,                          
    ru.current_rank AS current_rank,        
    MAX(ru.rating_time)                     
FROM ranks_update ru
INNER JOIN pages pFrom
    ON ru.page_ID = pFrom.page_ID
WHERE ru.ranking_ID = :id_rk
    AND ru.page_ID IN ( ** subquery 1 **)
    AND ru.rating_time >= ( ** subquery  2 **)                      
GROUP BY ru.page_ID                             
ORDER BY ru.current_sum_vote DESC
4

2 に答える 2

2
select ru.page_ID AS id, 
    pFrom.name AS name,
    UNIX_TIMESTAMP(ru.rating_time) AS action_date,                          
    ru.current_rank AS current_rank,        
    rum.MaxDate
from ranks_update ru
inner join(
    select page_ID, MAX(rating_time) as MaxDate
    from ranks_update
    WHERE ranking_ID = :id_rk
        AND page_ID IN ( ** subquery 1 **)
        AND rating_time >= ( ** subquery  2 **)   
    group by page_ID
) rum on ru.page_ID = rum.page_ID and ru.rating_time = rum.MaxDate
inner join pages pFrom on ru.page_ID = pFrom.page_ID
ORDER BY ru.current_sum_vote DESC
于 2012-10-03T15:36:38.630 に答える
0

寄与する要因は、MySQL の風変わりな解釈ですGROUP BY。標準 SQL では、集計されていないすべての列を指定する必要があります (例: GROUP BY ru.page_ID, pFrom.name, ru.currentRank, ru.current_sum_vote)。MySQL ではそれを行うことはできませんが、その動作は定義されておらず、おそらくランダムです。標準 SQL を作成すると、予測可能な結果が得られます。

于 2012-10-03T15:31:52.537 に答える