Thread View: alt.pl.comp.lang.csharp
1 messages
1 total messages
Started by GrzybSon
Sat, 16 Oct 2010 11:08
[NH] SQL na ICriteria/HQL
Author: GrzybSon
Date: Sat, 16 Oct 2010 11:08
Date: Sat, 16 Oct 2010 11:08
61 lines
2509 bytes
2509 bytes
Witam, Mam bazę z tabelkami kolejka (Queue) i wiadomość (Message). Każda kolejka może zawierać wiele wiadomości, a wiadomość należy tylko do jednej kolejki. Przykładowe dane tabela Queue Id | Label ------------- 1 | Incoming 2 | Outgoing yabela Message: Id | id_queue | id_messageType | dateAdded --------------------------------------------------------------------- 1 | 1 | 1 | 1.01.2009 2 | 1 | 2 | 1.01.2010 3 | 2 | 3 | 1.01.2008 I teraz chcę wylistować wszystkie kolejki, które posiadają co najmniej jedną wiadomość, ale w taki sposób, aby dla każdej kolejki pokazały się informacje o ostatnio dodane do tej kolejki wiadomości. wynik: Id | Label | id_message | id_messageType | dateAdded --------------------------------------------------------------------- 1 | Incoming | 2 | 2 | 1.01.2010 2 | Outgoing | 2 | 3 | 1.01.2010 Pod MSSQL 2k5+ można użyć fajnych funkcji typu RANK() i wtedy SQL może wyglądać następująco: SELECT q.id, q.Label, m.id as id_message, m.id_messageType, m.dateAdded FROM Queue q inner join ( select id, id_queue, id_messageType, dateAdded from ( SELECT id, id_queue, id_messageType, dateAdded, rank() over (partition by id_queue order by dateAdded desc) as r FROM Message ) as sq where sq.r = 1 ) m on q.id = m.id_queue W jaki sposób przepisać to zapytanie używając NHibernate (ICriteria/HQL)? Czy NH jest w stanie wydedukować, że dobrze byłoby użyć specyficznych dla MSSQL funkcji jak RANK() i ROW_NUMBER()? Dzięki :) -- Pozdrawiam, Maćko
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads