私はツーリスト ブログの一部を書いているので、2 つのエンティティがあります。場所と写真は 1 対多の関係にあるため、すべての場所に複数の写真を含めることができますが、1 つの写真は 1 つの場所に属します。
私の目的は、要約を作成することです。最後に追加された 3 つの場所と、すべての場所に 1 枚の写真が必要です (たとえば、ID が小さい写真でも問題ありません)。写真の ID だけでなく、写真のラベル、写真へのパスなどの詳細情報 (列) も重要です。
MS SQL 2008 で SQL を使用すると、ランク関数を使用して実行できます。
select top 3 * from
(
SELECT p.id, p.label, p.VisitDate, ph.id AS photo_id, ph.Label, ph.Path,
RANK() OVER (PARTITION BY p.id ORDER BY ph.id) AS _rank
FROM place AS p INNER JOIN
photo AS ph ON p.id = ph.place_id
) ranked
where _rank = 1
order by VisitDate desc
または、ランク付けせずに解決できます。
SELECT TOP (3) a.id AS ida, z.id AS idz, z.etykieta, z.sciezka, a.data_odwiedzenia
FROM place AS a INNER JOIN
photo AS z ON a.id = z.id_atrakcji
and z.id in
(
SELECT min(z.id) AS idz
FROM photo z
where z.id_atrakcji in (select top 3 a.id from place a order by a.data_dodania desc)
group by z.id_atrakcji
)
ORDER BY a.data_odwiedzenia DESC
ランキングなしでこのクエリを書き始めましたが、行き詰まりました。
summaryList =
session.QueryOver(() => placeAlias)
.JoinAlias(o => o.Photos, () => photoAlias)
.SelectList(list => list
.Select(() => placeAlias.Id).WithAlias(() => summaryAlias.PlaceId)
.Select(() => placeAlias.Etykieta).WithAlias(() => summaryAlias.PlaceName)
.Select(() => photoAlias.Etykieta).WithAlias(() => summaryAlias.PhotoLabel)
.Select(() => photoAlias.Id).WithAlias(() => summaryAlias.PhotoId)
)
.OrderByAlias(() => placeAlias.VisitDate).Desc
.WithSubquery.WhereProperty(x => x.Id).In(lastPlaces)
.TransformUsing(Transformers.AliasToBean<PlacesSummary>())
.List<PlacesSummary>();
これで私を助けてもらえますか?lastPlaces queryover を記述する方法、または別のアプローチがある可能性がありますか?
よろしく、マッコ