Tengo un proyecto en el que necesito guardar la solicitud de archivo. Tengo que guardar el estado de la solicitud con la fecha de cada paso.

Tengo dos tablas en mi base de datos:

FileRequest:

enter image description here

FileRequestStatus:

enter image description here

Me gustaría crear una solicitud para obtener cada FileName de la tabla FileRequest que solo tiene Status == 'NEW'. La salida deseada sería en este caso C12345, LIVE.

Si tienes una mejor idea para construir mi base de datos, la tomaré

Intenté algo así:

SELECT [FileName] FROM [FileRequest]
INNER JOIN [FileRequestStatus] ON [FileRequestStatus].[RequestId] = [FileRequest].[RequestId]
GROUP BY [FileRequestStatus].[RequestId]
HAVING COUNT([FileRequestStatus].[RequestStatus]) < 2
0
Xavier W. 27 dic. 2016 a las 19:00

3 respuestas

La mejor respuesta
SELECT FR.FileName 
FROM [FileRequest] FR
INNER JOIN [FileRequestStatus] FRS ON FRS.[RequestId] = FR.[RequestId]
GROUP BY FR.FileName 
HAVING COUNT(CASE WHEN FRS.RequestStatus <> 'New' THEN 1 END) = 0 --No statuses other than `NEW`
AND COUNT(CASE WHEN FRS.RequestStatus = 'New' THEN 1 END) >= 1 --Atleast one status `NEW`
1
Vamsi Prabhala 27 dic. 2016 a las 16:03

Creo que el método más simple es la agregación:

select fr.FileName
from nep.FileRequest fr join
     nep.FileRequestStatus] frs
     on frs.RequestId = fr.RequestId
group by fr.FileName
having min(frs.RequestStatus) = max(frs.RequestStatus) and
       min(frs.RequestStatus) = 'New';

Nota: Esto supone que el estado de la solicitud nunca es NULL (aunque eso es fácil de tener en cuenta).

Lo que esto hace es agregar por nombre de archivo y luego verificar que los estados de un archivo determinado sean todos iguales (la primera condición) e iguales a 'New' (la segunda condición).

1
Gordon Linoff 27 dic. 2016 a las 16:04

Debe incluir [FileName] en su GROUP BY, luego puede seleccionarlo como resultado

SELECT [nep].[FileRequest].[FileName] FROM [nep].[FileRequest]
INNER JOIN [nep].[FileRequestStatus] ON [nep].[FileRequestStatus].[RequestId] = [nep].[FileRequest].[RequestId]
GROUP BY [nep].[FileRequestStatus].[RequestId], [nep].[FileRequest].[FileName]
HAVING COUNT([nep].[FileRequestStatus].[RequestStatus]) < 2
0
Kim Hoang 27 dic. 2016 a las 16:04