異なる色とそのIDで識別される、同じタイトルの製品の複数のインスタンスを含む製品情報を保持するテーブルがあります。 id =タイトルでグループ化された最大IDである行全体を出力する必要がありますが、これを実行することができないようです。これは非常に単純化された表といくつかのサンプルデータです。
id title colour description
1 rico red blah1
2 rico blue blah2
3 rico yellow blah3
4 katia black blah4
5 katia white blah5
このコードの例では、3つのrico yellow blah3が必要なときに、1つのrico redblah1を取得します。
これが私が使用しているコードです:
SELECT pd_id, pd_title, pd_description, pd_colour,
pd_price,pd_large_image,pd_date,cat_sub_id_3,pd_new
FROM product
WHERE
cat_sub_id_1 = '".$cat_sub_id."'
AND cat_parent_id='".$cat_parent_id."'
GROUP BY pd_title
HAVING MAX(pd_id)
ORDER BY pd_id DESC
更新:みんなありがとう、
私はalinozの答えを使用して、機能する次のコードを考え出しました:)
SELECT
pd_id,pd_title,pd_description,pd_colour,pd_price,pd_large_image,pd_date,cat_sub_id_3,pd_new
FROM product
HERE cat_sub_id_1 = '".$cat_sub_id."' AND cat_parent_id='".$cat_parent_id."'
AND pd_id IN (
SELECT max(pd_id)
FROM product
WHERE cat_sub_id_1 = '".$cat_sub_id."' AND cat_parent_id='".$cat_parent_id."'
GROUP BY pd_title
)
GROUP BY pd_title
ORDER BY pd_id DESC
pd_id =(select max(pd_id)from ...)を使用してwhereにもう1つの句を追加してみてください
SELECT pd_id, pd_title, pd_description, pd_colour,
pd_price,pd_large_image,pd_date,cat_sub_id_3,pd_new
FROM product
WHERE
cat_sub_id_1 = '".$cat_sub_id."'
AND cat_parent_id='".$cat_parent_id."'
AND pd_id = (select max(pd_id) from product)
GROUP BY pd_title
このクエリは最適ではありませんが、それでうまくいきます。
Aaahhh、古き良き greatest-n-per-group .. ..
select *
from YourTable yt
inner join(
select title, max(id) id
from YourTable
group by title
) ss on yt.id = ss.id and yt.title = ss.title
もちろん、それに応じてこれをニーズに適合させる必要があります。
また、これは「必読」だと思います。 SQL列の最大値を持つ行のみを選択
私はこれがうまくいくかもしれないと思います(テストされていません):
SELECT * FROM that_table WHERE id IN (
SELECT MAX(id) FROM that_table GROUP BY title
) /* AND this = that */
任意の(この場合は「id」)最大値による1行の単純な
SELECT * FROM `your_table` order by id desc limit 1
エイドリアンとサルマンのアプローチに加えて、同じ(最大)IDを持つ2つ以上の行が同点の場合に異なる結果をもたらす、これもあります。タイトルごとに1行だけが表示されますが、他のクエリではすべての行が表示されます(あなたの場合、IDで注文する場合はおそらく無関係であり、主キーであると思います)。
SELECT
t.*
FROM
TableX AS t
JOIN
( SELECT DISTINCT
title --- what you want to Group By
FROM TableX
) AS dt
ON t.PK = --- the Primary Key of the table
( SELECT tt.PK
FROM TableX AS tt
WHERE tt.title = dt.title
ORDER BY id ASC --- (or DESC) what you want to Order By
LIMIT 1
)
副選択を使用する必要はないと思います。
select
SUBSTRING_INDEX(group_concat(testtab.ActionID order by testtab.ActionID DESC SEPARATOR '|'), '|', 1) as ActionIDs,
SUBSTRING_INDEX(group_concat(testtab.DiscountedPrice order by testtab.ActionID DESC SEPARATOR '|'), '|', 1) as DiscountedPrices
testtab.*
from testtab
where
testtab.StartDate <= 20160120
and testtab.EndDate > 20160120
and testtab.VariantID = 302304364
and testtab.DeleteStatus = 0
group by testtab.VariantID
order by testtab.VariantID, testtab.ActionID;
それは私のテストからのほんの速い例です。 substring_indexesで同じ方法で注文し、適切なセパレーターを使用するだけです。
楽しんで