Je cours MS SQL-Server-2016 J'essaye d'obtenir la première valeur d'une table partitionnée un ParentId. J'ai un ensemble de données comme ceci:SQL Obtenir la première valeur du tableau
CREATE TABLE #TempTable
(
PTORequestDetailId INT,
PTORequestId INT,
DivisionPTOAccrualId INT,
RequestDate DATE,
StartTime DateTime,
Hours Decimal(19,2),
ResponseNotes nvarchar(500),
Status int,
CreatedOn DateTime,
ModifiedOn DateTime
)
INSERT INTO #TempTable
SELECT 60, 48, 139, '2015-09-09', '2015-09-08 20:00:00.000', 8.00,'',0, '2015-09-09 13:30:40.363', '2015-09-09 13:30:40.313' UNION
SELECT 61, 48, 139, '2015-09-10', '2015-09-09 20:00:00.000', 8.00,'',0, '2015-09-09 13:30:40.363', '2015-09-09 13:30:40.313' UNION
SELECT 62, 48, 139, '2015-09-11', '2015-09-10 20:00:00.000', 8.00,'',0, '2015-09-09 13:30:40.363', '2015-09-09 13:30:40.313' UNION
SELECT 63, 48, 139, '2015-09-13', '2015-09-12 20:00:00.000', 8.00,'',0, '2015-09-09 13:30:40.363', '2015-09-09 13:30:40.313' UNION
CREATE TABLE #TempParent
(
PTORequestId INT,
)
INSERT INTO #TempParent
SELECT 48
Courir Cela va créer une table temporaire avec l'ensemble de données que je travaille avec. Je suis en train de sortir la première valeur pour le DivisionPTOAccrualId divisé par le # TempTable.PTORequestId,
SELECT #TempParent.*, AccrualDetails.*
FROM #TempParent
CROSS APPLY (
SELECT FIRST_VALUE(#TempTable.DivisionPTOAccrualId)
OVER (PARTITION BY #TempTable.PTORequestId
ORDER BY #TempTable.PTORequestDetailId ASC
ROWS UNBOUNDED PRECEDING
) as AccrualId
FROM #TempTable
WHERE #TempTable.PTORequestId = #TempParent.PTORequestId
) as AccrualDetails
Je suis essentiellement Essayer d'obtenir 139
une fois par ligne de mes parents, mais le FIRST_VALUE semble revenir plusieurs résultats afin de créer le produit cartésien.
Ainsi, au lieu d'obtenir un seul résultat de ligne du jeu
PTORequestId: 48 AccrualId: 139
Première valeur ne doit renvoyer qu'une seule valeur Cependant, ses 4 valeurs de retour. Pourquoi cela se produit-il, comment puis-je faire FIRST_VALUE retourner une seule valeur par ligne?
EDIT
Je pense que ce phénomène se produit parce que je sélectionne la FIRST_VALUE du TempTable, il est donc sélectionner la première valeur pour chaque ligne du tableau Temp. Mais en fait, je ne le fais qu'une seule fois
Pour tous ceux qui ont besoin de clarification sur ce que je faisais de mal. Je m'attendais à ce que ma partition soit filtrée dans ma table. J'ai supposé depuis SUM sur une table retournera la somme de la table entière au lieu de la somme de la table entière par rangée. Cette somme travail travail basé sur les données partitionnées ce qui n'est pas le cas.
fonction première valeur fait essentiellement la même chose. La première valeur ne fonctionne pas à cause de comment j'ai tout choisi. Ma jointure crée plusieurs lignes. –
Mais cela m'a aidé à reconnaître mon problème, j'ai besoin de faire plus de recherches avant de pouvoir accepter cette réponse, mais je pense que votre droit, je dois utiliser le numéro de ligne –