rechercher entre les dates dans deux tables ajoutent la valeur d'assassin d'un à l'extérieurSalut!
J'ai besoin d'aide
pour attribuer une valeur d'une table à une autre.
mon déclencheur est la date,
si la date dans dtP est égale ou supérieure dans une heure à partir de dtC, vous devez affecter la valeur de dtC: chart_value à la nouvelle colonne (PC_TA) dans dtC.
toute aide serait appréciée
tableaux colonnes

mon code - n'attribue aucune valeur que des zéros et ne traite pas la dernière ligne 
dtC = open ("....");
dtP = open ("....");
hr = 3600;
dtC << new column ( "PC_TA", numaric,continuous,format( "Best",8),);
for (i=1, i for (j=1, j if ( dtC:start_date[i] >= dtP:action_date[j] >= dtC:start_date[i] + hr,
dtC:PC_TA[i] = dtP:chart_value[j],
dtC:PC_TA[i] =0
);
);
);
Re: la recherche entre les dates dans deux tables ajoute la valeur d'assassin de l'un à l'extérieurmerci, Uday.
Donc, si je veux utiliser hour (), j'ai probablement besoin d'ajouter quelque part day () et month () également parce que mes données datent de 30 jours et que je ne suis intéressé que par l'attribution de valeurs dans un délai d'une heure, désolé pour la description du flou. mais pour des raisons IP, je ne peux pas trop parler des tables de données.
mais je peux donner un bon exemple théorique de ce que je veux réaliser:
Indiquez que la colonne ID dans DTC est Sales Mans (elle peut être répétée sur plusieurs lignes) et que la colonne Date de début correspond à la date à laquelle ils se rendent dans le centre commercial.
comme pour dtP, la colonne chart_value est la moyenne des ventes dans un temps aléatoire (date_action) au centre commercial.
Je veux voir quel vendeur améliore le plus le sceau du centre commercial par somme et attribue à un vendeur la moyenne des ventes dans le centre commercial une heure après sa visite au centre commercial. J'espère que cela pourra aider.
Je crois que le if () est bon, il me donne le 1 ou le 0 que je recherche lorsque je le teste. Pour une raison quelconque (le format de la date peut-être), il n’ya que 0 lorsque je le lance sur les tables (bien que je voie des dates remplissent la condition).
Re: la recherche entre les dates dans deux tables ajoute la valeur d'assassin de l'un à l'extérieurJe crois que le premier doit également être retourné
et le if () est bon.
Re: la recherche entre les dates dans deux tables ajoute la valeur d'assassin de l'un à l'extérieur @AdamChoen ,
Pas vraiment. La fonction hour () reçoit l'heure de l'horodatage. Elle renvoie donc une valeur comprise entre (1-24).
La ligne en surbrillance ci-dessous est fausse. Je ne comprends pas dans votre description ce que vous voulez faire, mais si vous vérifiez deux conditions logiques, il faudra qu’un opérateur logique associe ces conditions.

Re: la recherche entre les dates dans deux tables ajoute la valeur d'assassin de l'un à l'extérieurMerci a tous
J'ai corrigé le script
if () recherche une date dans dtP supérieure à une heure à compter de la date dtC et à la somme des valeurs attribuées.
hr = 3600;
dtC << new column ( "PC_TA", numaric,continuous,format( "Best",8),);
for (i=1, i <= Nrow(dtC), i++,
for (r=1, j <= Nrow(dtP), r++,
if ( dtC:start_date[i] <= dtP:action_date[r] <= dtC:start_date[i] + hr,
dtC:PC_TA[i] = dtC:PC_TA[i] + dtP:chart_value[r]
);
);
);mais la colonne PC_TA est vide
@ uday_guntupalli
si je prends les premières lignes de la table et soustrais, je suppose d'obtenir environ 49 heures ~ 176400 s.
avec la fonction Hour () je reçois 22
dtP:action_date[1] - dtC:start_date[1];
/*:
-177221
hour(dtP:action_date[1]) - hour(dtC:start_date[1]);
/*:
22
Re: la recherche entre les dates dans deux tables ajoute la valeur d'assassin de l'un à l'extérieur @AdamChoen ,
Quelques observations et suggestions:
1. N'utilisez pas "j" comme variable de boucle. JMP a une fonction intégrée "J" et il est conseillé de ne pas utiliser "j" comme variable.
2 Votre si condition semble avoir un problème.
Généralement, votre condition if devrait ressembler à ce que j'ai ci-dessous, mais vous avez une condition complète et une condition incomplète dans votre instruction if jointe sans opérateur logique.
dtC = data table ("cycles");
dtP = data table ("74_edt_PC");
hr = 3600;
dtC << new column ( "PC_TA", numaric,continuous,format( "Best",8),);
For( i = 1, i < N Row( dtC ), i++,
For( r = 1, r < N Row( dtP ), r++,
If( dtC:start_date[i] >= dtP:action_date[r],
dtC:PC_TA[i] = dtP:chart_value[r],
dtC:PC_TA[i] = 0
)
)
);Par exemple, si vous voulez comparer les heures des 2 horodatages, vous devriez plutôt considérer:
dtC = data table ("cycles");
dtP = data table ("74_edt_PC");
hr = 3600;
dtC << new column ( "PC_TA", numaric,continuous,format( "Best",8),);
For( i = 1, i < N Row( dtC ), i++,
For( r = 1, r < N Row( dtP ), r++,
If( hour(dtC:start_date[i]) >= hour(dtP:action_date[r]),
dtC:PC_TA[i] = dtP:chart_value[r],
dtC:PC_TA[i] = 0
)
)
);
Re: la recherche entre les dates dans deux tables ajoute la valeur d'assassin de l'un à l'extérieurJe pense que votre logique d’instruction If () est légèrement floue. Votre seconde comparaison doit être inférieure ou égale à Start_Date plus 1 heure
If( dtC:start_date[i] >= dtP:action_date[j] <= dtC:start_date[i] + hr,
dtC:PC_TA[i] = dtP:chart_value[j],
0
);