[SQL] Limit in join
Boris Mattijssen
23/12/2009 22:25:00Beste allemaal,
Ik heb de volgende query:
Maar het komt voor dat in orders_status_history meerdere keren de status 11 (annulering) voorkomt.
Nu wil ik alleen die orders selecteren waarbij de date_added 12-2009 is van de eerste keer.
Voorbeeld:
Orders:
orderID | omschrijving
1 | snowboard
2 | ski's
3 | snowboard schoenen
Orders status history:
oshID | orderID | orders_status_id | datum | omschrijving
1 | 1 | 2009-11-15 | 5 | bestelling geplaatst
2 | 1 | 2009-12-05 | 11 | geannuleerd
3 | 2 | 2009-11-20 | 5 | bestelling geplaatst
4 | 2 | 2009-11-21 | 11 | geannuleerd
5 | 2 | 2009-12-01 | 17 | extra mededeling
6 | 2 | 2009-12-09 | 11 | geannuleerd
7 | 3 | 2009-12-06 | 5 | geplaatst
8 | 3 | 2009-12-08 | 11 | geannuleerd
Nu wil ik dus als resultaat krijgen op COUNT(*) bij MONTH = 12 en YEAR = 2009: 2
En niet 4 zoals nu..
Bold Moet dus wel gecount worden.
Italic Moet dus niet gecount worden.
Ik hoop dat het duidelijk is.
Mvg,
Boris
Ik heb de volgende query:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
SELECT
COUNT(*)
FROM
orders AS o
LEFT JOIN orders_status_history AS osh
USING(orders_id)
WHERE
osh.orders_status_id = 11
AND
YEAR(osh.date_added) = 2009
AND
MONTH(osh.date_added) = 12
COUNT(*)
FROM
orders AS o
LEFT JOIN orders_status_history AS osh
USING(orders_id)
WHERE
osh.orders_status_id = 11
AND
YEAR(osh.date_added) = 2009
AND
MONTH(osh.date_added) = 12
Maar het komt voor dat in orders_status_history meerdere keren de status 11 (annulering) voorkomt.
Nu wil ik alleen die orders selecteren waarbij de date_added 12-2009 is van de eerste keer.
Voorbeeld:
Orders:
orderID | omschrijving
1 | snowboard
2 | ski's
3 | snowboard schoenen
Orders status history:
oshID | orderID | orders_status_id | datum | omschrijving
1 | 1 | 2009-11-15 | 5 | bestelling geplaatst
2 | 1 | 2009-12-05 | 11 | geannuleerd
3 | 2 | 2009-11-20 | 5 | bestelling geplaatst
4 | 2 | 2009-11-21 | 11 | geannuleerd
5 | 2 | 2009-12-01 | 17 | extra mededeling
6 | 2 | 2009-12-09 | 11 | geannuleerd
7 | 3 | 2009-12-06 | 5 | geplaatst
8 | 3 | 2009-12-08 | 11 | geannuleerd
Nu wil ik dus als resultaat krijgen op COUNT(*) bij MONTH = 12 en YEAR = 2009: 2
En niet 4 zoals nu..
Bold Moet dus wel gecount worden.
Italic Moet dus niet gecount worden.
Ik hoop dat het duidelijk is.
Mvg,
Boris
Gewijzigd op 01/01/1970 01:00:00 door Boris Mattijssen
PHP hulp
21/12/2024 18:17:06Martijn B
23/12/2009 22:50:00Volgens mij zou je 3 records moeten hebben?
Om de meest actuele order statussen op te halen zou je dit kunnen doen:
Om de meest actuele order statussen op te halen zou je dit kunnen doen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT
COUNT(*)
FROM
orders AS o
LEFT JOIN orders_status_history AS osh
USING(orders_id)
WHERE
osh.id = ( SELECT
osh2.id
FROM
orders_status_history osh2
WHERE
osh2.orderID = osh.orderID
ORDER BY
osh2.datum DESC )
AND osh.orders_status_id = 11
COUNT(*)
FROM
orders AS o
LEFT JOIN orders_status_history AS osh
USING(orders_id)
WHERE
osh.id = ( SELECT
osh2.id
FROM
orders_status_history osh2
WHERE
osh2.orderID = osh.orderID
ORDER BY
osh2.datum DESC )
AND osh.orders_status_id = 11
Gewijzigd op 01/01/1970 01:00:00 door Martijn B