2016-08-04 1 views
1

J'ai une table mysql avec les champs suivantsSelf Comparez la table de transaction pour trouver des valeurs

Transaction_id, toy_id, toy_name, Quantity_sold, Date_sold.

La question à laquelle j'essaie de répondre est: quels jouets ont été vendus aujourd'hui qui n'ont pas été vendus hier. Je comprends que c'est très vague, alors n'hésitez pas à faire des hypothèses qui doivent être faites pour vous aider à écrire juste trop plz et merci !!

+3

Alors qu'avez-vous fait pour essayer de résoudre vous-même? Nous sommes heureux d'aider, mais seulement pour ceux qui ont essayé de le faire eux-mêmes. nous ne sommes pas ici pour faire votre travail pour vous. –

+0

avez-vous une liste de jouets pour chèque qui sont vendus et qui non? – scaisEdge

+0

Marc B, Désolé de ne pas avoir mis mon code, je l'ai fait exprès pour ne pas orienter les réponses dans une direction spécifique. Je comprends votre point de vue et je ne veux pas profiter du travail de quelqu'un d'autre. Merci pour votre temps. –

Répondre

0

Une méthode utilise l'agrégation avec une clause having:

select toy_id 
from t 
where date_sold >= date_sub(curdate(), interval 1 day) 
group by toy_id 
having date(min(date_sold)) = curdate(); 

La clause where limite les données aux deux derniers jours. Si la date minimum est aujourd'hui, alors aucun jouet n'a été vendu hier.

0

Vous pouvez utiliser l'opérateur not exists pour trouver les jouets qui n'ont pas été vendus hier. .: par exemple

SELECT toy_id, toy_name 
FROM transactions today 
WHERE date_sold = CURRENT_DATE() 
     AND NOT EXISTS (SELECT * 
         FROM transactions yesterday 
         WHERE today.toy_id = yesterday.toy_id AND 
           yesterday.date_sold = 
           today.date_solde - INTERVAL 1 DAY); 

0

Vous pouvez utiliser un pas en SUBSELECT

Select Transaction_id, toy_id, toy_name, Quantity_sold, Date_sold 
    from my_table 
    where to_id not in (
    select T toy_id 
    from my_table 
    where Date_sold = date(date_sub(now(), INTERVAL 1 day)) 
);