51 messaggi dal 02 settembre 2002
Salve a tutti

sto tentando di scrivere questa "semplice" query ma che restituisce sempre un errore:

select distinct u FROM Users AS u left join u.PagamList AS pagam WHERE Year(Max(pagam.DataPagamento)) = 2010

purtroppo mi sono reso ben presto contro che Year(Max(DATE)) inserito in una Where non è una sintassi valida (quella che riporto è la query scritta in HQL, un linguaggio sql di NHibernate ma succede lo stesso con t-sql)

Sapete per caso come poter scrivere in alternativa la query?

Grazie in anticipo
Alex
20 messaggi dal 02 settembre 2010
www.si2001.it
Ciao,
proverei con where datepart('yyyy',pagam.DataPagamento)=2010.

quello che non capisco però è perchè fai MAX...

Simone

Simone Andrioletti

Senior developer at SI2001 Italy
secondo me perchè potrebbe avere due date di pagamento nel 2010 (magari un ordine annullato e uno poi pagato correttamente)

Ormai programmano tutti... ma la professionalità appartiene a pochi
51 messaggi dal 02 settembre 2002
Esatto, il max viene utilizzato perchè ci sono più date, quindi prelevo l'ultima
2.197 messaggi dal 30 novembre 2001
mi sembra che nella left join manchi l'operatore ON
748 messaggi dal 08 aprile 2009
L'errore che ti da è percaso che non puoi utilizzare funzioni di aggregazione nella clausola where?
2.197 messaggi dal 30 novembre 2001
cmq se utilizzi sql2005 puoi utilizzare la clausola cross apply:
SELECT DISTINCT U.UserID
         ,O.Descrizione     
          FROM dbo.Utente U
  CROSS APPLY (SELECT TOP 1 Ordine.*                      ,Descrizione
       FROM dbo.Ordine
               WHERE Ordine_UserID = UserID
       AND Anno = 2010
      ORDER BY Anno DESC) O 

Modificato da chiccosimo il 30 settembre 2010 12.15 -

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.