🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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
#21785
Author: GrzybSon
Date: Sat, 16 Oct 2010 11:08
61 lines
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