tipos hacer ejemplos datos consultas complejas como sql tsql derived-table

hacer - tipos de consultas en mysql



Crear una consulta SQL para recuperar los registros más recientes (4)

Agregue en una tabla derivada de subconsulta y luego únase a ella.

Select Date, User, Status, Notes from [SOMETABLE] inner join ( Select max(Date) as LatestDate, [User] from [SOMETABLE] Group by User ) SubMax on [SOMETABLE].Date = SubMax.LatestDate and [SOMETABLE].User = SubMax.User

Estoy creando un módulo de placa de estado para mi equipo de proyecto. La placa de estado permite al usuario establecer su estado como de entrada o salida y también pueden proporcionar una nota. Estaba planeando almacenar toda la información en una sola tabla ... y un ejemplo de los datos a continuación:

Date User Status Notes ------------------------------------------------------- 1/8/2009 12:00pm B.Sisko In Out to lunch 1/8/2009 8:00am B.Sisko In 1/7/2009 5:00pm B.Sisko In 1/7/2009 8:00am B.Sisko In 1/7/2009 8:00am K.Janeway In 1/5/2009 8:00am K.Janeway In 1/1/2009 8:00am J.Picard Out Vacation

Me gustaría consultar los datos y devolver el estado más reciente para cada usuario, en este caso, mi consulta arrojaría los siguientes resultados:

Date User Status Notes ------------------------------------------------------- 1/8/2009 12:00pm B.Sisko In Out to lunch 1/7/2009 8:00am K.Janeway In 1/1/2009 8:00am J.Picard Out Vacation

¿Intento descubrir el TRANSACT-SQL para que esto suceda? Cualquier ayuda sería apreciada.


De otra forma, esto escaneará la tabla solo una vez en vez de dos si usa una subconsulta

solo servidor SQL de 2005 en adelante

select Date, User, Status, Notes from ( select m.*, row_number() over (partition by user order by Date desc) as rn from [SOMETABLE] m ) m2 where m2.rn = 1;


La tabla derivada funcionaría, pero si se trata de SQL 2005, un CTE y un ROW_NUMBER podrían ser más limpios:

WITH UserStatus (User, Date, Status, Notes, Ord) as ( SELECT Date, User, Status, Notes, ROW_NUMBER() OVER (PARTITION BY User ORDER BY Date DESC) FROM [SOMETABLE] ) SELECT User, Date, Status, Notes from UserStatus where Ord = 1

Esto también facilitaría la visualización de los estados x más recientes de cada usuario.


Otra manera fácil:

SELECT Date, User, Status, Notes FROM Test_Most_Recent WHERE Date in ( SELECT MAX(Date) from Test_Most_Recent group by User)