Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

T-SQL:selezione della colonna in base a MAX (altra colonna)

Utilizzo di un accesso automatico:

Ciò restituirà tutti i valori con valori di sottochiave che corrispondono, nel caso in cui siano presenti multipli.

SELECT a.value
  FROM TABLE a
  JOIN (SELECT MAX(t.subkey) AS max_subkey
          FROM TABLE t
         WHERE t.key = 1) b ON b.max_subkey = a.subkey
 WHERE a.key = 1

Utilizzo di RANK e CTE (SQL Server 2005+):

Ciò restituirà tutti i valori con valori di sottochiave che corrispondono, nel caso in cui siano presenti multipli.

WITH summary AS (
  SELECT t.*,
         RANK() OVER(ORDER BY t.subkey DESC) AS rank
    FROM TABLE t
   WHERE t.key = 1)
SELECT s.value
  FROM summary s
 WHERE s.rank = 1

Utilizzo di ROW_NUMBER e CTE (SQL Server 2005+):

Ciò restituirà una riga, anche se ce ne sono più di una con lo stesso valore di sottochiave...

WITH summary AS (
  SELECT t.*,
         ROW_NUMBER() OVER(ORDER BY t.subkey DESC) AS rank
    FROM TABLE t
   WHERE t.key = 1)
SELECT s.value
  FROM summary s
 WHERE s.rank = 1

Utilizzo di TOP:

Ciò restituirà una riga, anche se ce ne sono più di una con lo stesso valore di sottochiave...

  SELECT TOP 1
         t.value
    FROM TABLE t
   WHERE t.key = 1
ORDER BY t.subkey DESC