1

だから私は私のテーブルでSELECTDistinctオプションを使おうとしています

Hashlog.select("DISTINCT tag").select("created_at").order("created_at DESC").limit(10)

 1.9.3-p286 :017 > Hashlog.select("DISTINCT tag").select("created_at").order("created_at DESC").limit(10)
      Hashlog Load (0.7ms)  SELECT DISTINCT tag, created_at FROM "hashlogs" ORDER BY created_at DESC LIMIT 10
     => [#<Hashlog tag: "new", created_at: "2012-12-11 04:06:37">, 
     #<Hashlog tag: "now", created_at: "2012-12-11 04:06:33">, 
     #<Hashlog tag: "googleold", created_at: "2012-12-11 04:06:28">, 
     #<Hashlog tag: "google", created_at: "2012-12-11 04:06:26">, 
     #<Hashlog tag: "facebook", created_at: "2012-12-11 04:06:21">, 
     #<Hashlog tag: "facebook", created_at: "2012-12-11 04:06:18">, 
     #<Hashlog tag: "faceboot", created_at: "2012-12-11 04:06:15">]

そのため、タグ列でのみ結果を一意にする必要がありますが、selectを通過しない限り、created_atで並べ替えることはできません。

4

2 に答える 2

4

あなたがしようとしているのは、タグごとに最も古い(つまり最小の)順に並べられた個別のタグ値を選択することだと思います。created_atこれは、関連付けられた複数の値を持つタグから生じるあいまいさを解決する 1 つの方法created_atです。

その場合は、次のようなことを試してください。

Hashlog.select("tag, min(created_at) as earliest").group("tag").order("earliest DESC").limit(10)

.

于 2012-12-11T06:31:59.377 に答える
0

プロジェクトで次のスニペットを使用しました

Product.select("DISTINCT(products.material_id), products.material_id, products.class_id").where('products.class_id' => current_user.class_id) 
于 2012-12-11T06:26:49.840 に答える