Exécuter la requête externe pour chaque date obtenue à partir de la requête interne
J'ai le tableau suivant BOOKSALES. Quelques informations sur les attributs -
- BookID - L'identifiant unique du livre
- SaleDate - Date à laquelle le livre a été vendu
- RegisterDate - Date à laquelle la vente a été enregistrée dans les livres de comptes
La table ressemble à ceci -
+--------+------------+--------------+
| BOOKID | SALEDATE | REGISTERDATE |
+--------+------------+--------------+
| A1 | 2021-03-01 | 2021-03-01 |
| A2 | 2021-03-01 | 2021-03-02 |
| A3 | 2021-03-01 | 2021-03-03 |
| A4 | 2021-03-02 | 2021-03-02 |
| A5 | 2021-03-02 | 2021-03-03 |
| A6 | 2021-03-03 | 2021-03-03 |
| A7 | 2021-04-01 | 2021-04-01 |
| A8 | 2021-04-01 | 2021-04-02 |
+--------+------------+--------------+
Maintenant, je veux exécuter la requête qui me donne le nombre d'identifiants de livres pour chaque date de vente, mais la date d'enregistrement est inférieure à la date de vente. Par exemple- Si je veux exécuter la requête pour le 2 mars, la requête ressemblera à-
SELECT COUNT(BOOKID) FROM BOOKSALES WHERE SALEDATE>='2021-03-01' AND SALEDATE<='2021-03-02' AND REGISTERDATE<='2021-03-02';
Je veux exécuter la requête ci-dessus pour chaque date en mars. J'ai donc essayé de reformuler la requête comme suit
SELECT SALEDATE,COUNT(BOOKID) FROM BOOKSALES WHERE SALEDATE>='2021-03-01' AND (SALEDATE AND REGISTERDATE)<=(SELECT DISTINCT(SALEDATE) FROM BOOKSALES WHERE SALEDATE>='2021-03-01' AND SALEDATE<='2021-03-31') ORDER BY SALEDATE GROUP BY SALEDATE;
Mais la requête ci-dessus ne semble pas fonctionner. Quelqu'un peut-il suggérer comment écrire correctement la requête ci-dessus?
La sortie finale devrait ressembler à -
+------------+---------------+
| SALEDATE | COUNT(BOOKID) |
+------------+---------------+
| 2021-03-01 | 1 |
+------------+---------------+
| 2021-03-02 | 3 |
+------------+---------------+
| 2021-03-03 | 6 |
+------------+---------------+
L'objectif de la tâche est un peu flou, je ne vois pas ce que vous essayez d'accomplir. Quoi qu'il en soit, la sortie souhaitée peut être renvoyée avec cette requête :
SELECT A.SALEDATE, COUNT(*)
FROM
(SELECT SALEDATE
FROM BOOKSALES
WHERE SALEDATE BETWEEN '2021-03-01' AND '2021-03-31'
GROUP BY SALEDATE
) AS A
INNER JOIN BOOKSALES AS B
ON A.SALEDATE >= B.REGISTRATION_DATE
GROUP BY A.SALEDATE