Ordonner des données selon un champ d'une autre table

Le problème exposé dans ce sujet a été résolu.

Bonjour,

J'ai les tables suivantes :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
CREATE TABLE IF NOT EXISTS Tables(
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name VARCHAR NOT NULL,
    UNIQUE (name)
);

CREATE TABLE IF NOT EXISTS CrudeData(
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    cow INTEGER NOT NULL,
    date DATE NOT NULL,
    prod REAL NOT NULL, -- L
    cons REAL NOT NULL, -- kg
    lact INTEGER NOT NULL,
    day INTEGER NOT NULL,
    UNIQUE (cow, date)
);

INSERT OR IGNORE INTO Tables (name) VALUES ('CrudeData');

CREATE TABLE IF NOT EXISTS DifferencedData(
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    source INTEGER NOT NULL, -- The corresponding line in CrudeData table
    prod REAL NOT NULL,
    degree INTEGER, -- How many times data have been differenced
    FOREIGN KEY(source) REFERENCES CrudeData(id),
    UNIQUE (source, degree)
);

INSERT OR IGNORE INTO Tables (name) VALUES ('DifferencedData');

Et je souhaiterais récupérer, dans l'ordre chronologique, les productions des lignes de DifferencedData pour lesquelles le champ degree est à 1 et le champ source fait référence à l'identifiant d'une ligne de CrudeData ayant 1 pour valeur du champ cow.

Autrement dit, je veux récupérer les productions différenciées une fois de la vache 1 et les ranger par ordre chronologique (selon le champ date de CrudeData).

Il me semble que je parviens à les récupérer tout court ainsi :

1
SELECT prod FROM DifferencedData WHERE degree = 1 AND source IN (SELECT id FROM CrudeData WHERE cow = 1)

Mais j'ignore comment les ordonner, la requête suivante me renvoyant un Error: no such column: CrudeData.date :

1
SELECT prod FROM DifferencedData WHERE degree = 1 AND source IN (SELECT id FROM CrudeData WHERE cow = 1) ORDER BY CrudeData.date

Merci !

PS : je ne pense pas que ça influe beaucoup, mais je suis avec SQLite.

+0 -0

Autant pour moi, c'était tout bête :

1
2
3
4
5
6
SELECT DifferencedData.prod 
FROM DifferencedData 
INNER JOIN CrudeData 
    ON DifferencedData.source = CrudeData.id 
WHERE DifferencedData.degree = 1 AND CrudeData.cow = 1 
ORDER BY CrudeData.date;
+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte