0
  • attributeId と属性値を持つ最新の追加された 3 つの値が必要ですが、両方で個別に機能しません。以下は私のクエリです..これに対する解決策はありますか?

      SELECT DISTINCT  attributeValue 
      FROM user_trans_service_selection 
      ORDER BY uniqueId DESC LIMIT 0,3
    

以下は私のテーブルです

  • uniqueId - 属性 ID - 属性値
  • 1 - 101 - 6700
  • 2 - 102 - 雇用
  • 3 - 103 - 都市
  • 4 - 101 - 8900
  • 5 - 102 - 雇用
  • 6 - 102 - 学生
  • 7 - 103 - タウン
  • 8 - 103 - 村

私は結果が欲しい:

  • attributeId - 属性値
  • 101 - 8900
  • 102 - 学生
  • 103 - 村
4

4 に答える 4

4

ゴードン・リノフの答えにちょっと似ています。SQLサーバーではLIMITを使用しないでください

sqlfiddler

select utss.attributeid, utss.attributeValue
from user_trans_service_selection utss 
    inner join
     (select top 3 attributeid, max(uniqueid) as maxid
      from user_trans_service_selection
      group by attributeid
      order by max(uniqueid)
     ) attr
     on attr.maxid = utss.uniqueid
于 2012-10-05T22:38:14.957 に答える
2

必要なのは、各属性の ID が最も高い行です。これを取得するには、結合を行う必要があります。

select utss.attributeid, utss.attributeValue
from user_trans_service_selection utss join
     (select attributeid, max(uniqueid) as maxid
      from user_trans_service_selection
      group by attributeid
     ) attr
     on attr.maxid = utss.id
order by maxid desc
limit 0, 3
于 2012-10-05T21:47:33.780 に答える
2

// これには GROUP BY 関数を使用します

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name

// これらの V ステップ {A、B、および C} に従って、[attributeId] ごとに最後に追加されたレコードを検索します // {A} [attributeId] ごとに最後に追加されたレコードを検索します (例: 最高の [uniqueId])

SELECT attributeId, max(uniqueId)
FROM table_name
GROUP BY attributeId

// {B} 最後のクエリの where 句でこの結果を後でネストしますが、最初に [attributeId] を取り除く必要があります。

SELECT uniqueId
FROM( SELECT attributeId, max(uniqueId)
      FROM table_name
      GROUP BY attributeId)

// {C} これで、最終的なクエリを作成し、テーブル [table_name] から必要なものを選択できます。このクエリの WHERE 句では、{B} で見つかった ID のみに必要な情報を表示するフィルターを配置できます。

SELECT uniqueId, attributeId, attributeValue
FROM table_name
WHERE attributeId IN (    SELECT attributeId
              FROM(   SELECT attributeId, max(uniqueId)
          FROM table_name
          GROUP BY attributeId))
于 2012-10-05T22:39:46.190 に答える
0

最後に、エラーのない完全に機能するコードは次のとおりです。

     select utss.attributeid, utss.attributeValue
     from user_trans_service_selection utss 
      inner join
     (select attributeid, max(uniqueid) as maxid
      from user_trans_service_selection
      group by attributeid
      order by max(uniqueId) desc limit 0,3
     ) attr
     on attr.maxid = utss.uniqueid

みんな、ありがとう !!!

于 2012-10-06T00:10:39.397 に答える