-1
votes

Comment déterminer que la date est incluse dans un mois donné et rejoindre les tables?

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 |


2 commentaires

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.


3 Réponses :


1
votes

Vous avez besoin rejoindre & conversations: xxx


2 commentaires

Bonjour! Il me semble que Cast (T2.MONTH_KEY comme date) = Cast (t1.time_key comme date) 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 , 2018-02-01 , 2018-03-01 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 et deuxième table a une telle valeur 2018-01-01 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.



1
votes

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            


2 commentaires

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 et deuxième table a une telle valeur 2019-01-01 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.



1
votes

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;


1 commentaires

@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.