J'ai la première table qui stocke des informations horaires sur l'état de l'objet.
| TIME_KEY | ID_OBJECT | STATUS | NAME | |---------------------|-----------|--------|------------| | 2018-01-01 00:00:00 | 1 | IN | Apple | | 2018-01-01 00:00:00 | 2 | OUT | HP | | 2018-01-01 01:00:00 | 1 | OUT | Apple | | 2018-01-01 01:00:00 | 2 | IN | HP | | 2018-02-01 00:00:00 | 1 | IN | Samsung | | 2018-02-01 00:00:00 | 2 | OUT | Blackberry | | 2018-02-01 01:00:00 | 1 | OUT | Samsung | | 2018-02-01 01:00:00 | 2 | IN | Blackberry |
3 Réponses :
Vous avez besoin rejoindre code> & conversations:
Bonjour! Il me semble que Cast (T2.MONTH_KEY comme date) = Cast (t1.time_key comme date) CODE> L'instruction n'est pas correcte dans mon cas. Laissez-moi essayer de vous expliquer. Dans mon message, vous pouvez remarquer juste exemple. La première table stocke des informations horaires sur l'état de l'objet qui a été recueilli pendant plusieurs années chaque mois toutes les heures. La deuxième table contient des informations sur le nom de l'objet dans un certain mois. Mois stocké dans la deuxième table comme suit: 2018-01-01 code>, 2018-02-01 code>, 2018-03-01 code> E.T.C. Comme vous pouvez voir le premier jour du mois seulement.
Disons dans la situation suivante lorsque la première table a une telle valeur 2018-01-02 03:00:00 Code> et deuxième table a une telle valeur 2018-01-01 code> je ne peux pas Rejoignez-les avec vous CODE CAUSITE Les dates sont différentes, mais elles sont en fait dans le même mois. J'ai besoin de rejoindre l'année et le mois d'une manière ou d'une autre. J'espère que tu me comprends.
Vous pouvez convertir la date en mois et peut rejoindre
select t2.TIME_KEY,t1.ID_OBJECT,STATUS,NAME FROM table1 t1 JOIN table2 t2 on month(t1.TIME_KEY)=month(t2.TIME_KEY) and t1.ID_OBJECT=t2.SITE_ID
Bonjour! Je ne peux pas convertir la date du mois seulement. Ce n'est pas correct. Laissez-moi essayer de vous expliquer. Dans mon message, vous pouvez remarquer juste exemple. La première table stocke des informations horaires sur l'état de l'objet qui a été recueilli depuis plusieurs années chaque mois. La deuxième table contient des informations sur le nom de l'objet dans un certain mois. Malheureusement, dans votre exemple, beaucoup de choses non prises en compte.
Disons dans la situation suivante lorsque la première table a une telle valeur 2018-01-02 03:00:00 Code> et deuxième table a une telle valeur 2019-01-01 code> je ne peux pas Rejoignez-les avec votre code Cause Mois sont les mêmes mais l'année est différente. J'ai besoin de rejoindre l'année et le mois d'une manière ou d'une autre. J'espère que tu me comprends.
Vous pouvez utiliser une sous-requête corrélée:
select t1.*,
(select t2.name
from table2 t2
where t2.site_id = t1.object_id and
t1.time_key >= t2.month_key
order by t2.month_key desc
limit 1
) as name
from table1 t1;
@Nurzhannogerbek. . . Que veux-tu dire? Si vous avez besoin que le résultat soit du mois en cours, cela peut être ajusté dans la clause de corrélation. Cela semble être une approche raisonnable, compte tenu des données limitées fournies dans la question.
Avez-vous essayé quelque chose?
Donc, ce n'est pas un site Web de service de codage libre. Poster votre requête. Si cela ne fonctionne pas, nous pouvons vous aider.