2017-09-13 3 views
2

Im très nouveau à SQL, j'ai une table SQL qui est en tant que telleSQL Comparer des données basées sur les lignes de date dans les colonnes

Name | Date    | performance_reading_1 | performance_reading_2  
--------------------------------------------------------------------------- 
BOB 2016-11-05 21:59:59  2000.000     398776.000 
JON 2016-11-05 23:59:59  2120.000     118273.000 
BOB 2016-11-06 13:59:59  3450.000     228666.000 
JON 2016-11-06 09:22:59  2432.000     158643.000 
BOB 2016-12-09 13:59:59  3450.000     228666.000 
JON 2016-12-11 09:22:59  2432.000     158643.000 

Fondamentalement, je besoin d'une instruction SQL qui affiche dans 1 rang 2 dates différentes et les données de performance pour chaque date en tant que telle.

Les 2 dates et le nom varieront et seront passés dans une variable. que je dois dire Nom de $ sur date1 de $ et date2 $

Name | Date 1    | perf_1 | perf_2 | Date 2     | perf_1 | perf_2 
---------------------------------------------------------------------------------------------------------------- 
BOB 2016-11-05 21:59:59  2000.000 398776.000 2016-12-09 13:59:59  3450.000 228666.000 
+0

Qu'en est-il de la troisième date? –

+0

Il peut être utile pour une troisième ou quatrième date si cela fonctionne encore si elles sont vides – catalyph

Répondre

2

Une jointure réflexive travaillerait bien ici:

DECLARE @Name varchar(50) = 'Bob' 
DECLARE @Date1 datetime = '2016-11-05 21:59:59' 
DECLARE @Date2 datetime = '2016-12-09 13:59:59' 

SELECT T.Name, 
     T.Date as 'Date1', 
     T.Performance_Reading_1 as 'perf_1', 
     T.Performance_Reading_2 as 'perf_2', 
     T2.Date as 'Date2', 
     T2.Performance_Reading_1 as 'perf_1', 
     T2.Performance_Reading_2 as 'perf_2', 
FROM YourTable T 
INNER JOIN YourTable T2 on T.Name = T2.Name 
WHERE T.Name = @Name 
AND T.Date = @Date1 
AND T2.Date = @Date2 

PS Vos alias pour chaque Performance_Reading sont les mêmes pour chaque table, pourrait obtenir confus ..

+0

Merci! Je vais essayer ceci, Toute façon de supprimer facilement l'heure de la date? car je peux juste spécifier par exemple '2016-11-05' – catalyph

+1

@catalyph Bien sûr, il suffit de lancer ou de convertir dans la clause 'WHERE' si vous ne saisissez qu'une date. c'est à dire. 'ET CONVERSION (date, T.Date) = @ Date1'. La seule chose à noter est que vous pourriez avoir des doublons sans l'horodatage, si par exemple, Bob a deux enregistrements le même jour. –

+0

Merci! cela a fonctionné exactement comme j'en avais besoin, j'ai ajouté quelques ajustements car j'avais besoin d'eux comme colonne supplémentaire et tout fonctionne bien, merci! – catalyph