Exécuter la requête externe pour chaque date obtenue à partir de la requête interne


Dawson Smith

J'ai le tableau suivant BOOKSALES. Quelques informations sur les attributs -

  1. BookID - L'identifiant unique du livre
  2. SaleDate - Date à laquelle le livre a été vendu
  3. 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 |
+------------+---------------+
Tedo G.

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

Articles connexes


Exécuter la commande à partir de la requête

RC LFA J'ai l'intention d'envoyer un e-mail via le résultat d'une requête. le problème est qu'il est en cours d'impression au lieu d'exécuter la commande. quelqu'un peut-il m'expliquer ce que je fais mal? sqlTxt=$(sqlplus -s "$CONNECT" << EOF WHENEVER SQLE

Mysql: Exécuter une requête pour chaque date

Madoc Comadrin J'utilise Mysql 5.5.43-0+deb7u1. J'ai réussi à créer cette requête pour récupérer les données de pluie pour un jour particulier (j'utilise MODparce que les données de pluie sont mises à jour à chaque heure complète tandis que d'autres données so