Inkonsistente MySQL-Abfrageergebnisse
<p>Ich habe eine Tabelle namens „Transaktion“, die Transaktionen enthält, die über ein bestimmtes Zahlungssystem durchgeführt wurden.
Ich wollte (zum Beispiel) den Tagesbericht für Juli 2023 erhalten und habe die folgende Abfrage ausgeführt: </p>
<pre class="brush:sql;toolbar:false;">SELECT DAY(CREATED), count(*) FROM `transaction`
WO STATUS = 'genehmigt' UND MONAT(ERSTELLT) = 07 UND JAHR(ERSTELLT) = 2023
GRUPPE NACH TAG (ERSTELLT)
</pre>
<p>Das Ergebnis überspringt einige Tage, zum Beispiel für den 7. Tag des Monats, ich erhalte nichts, aber wenn ich die Abfrage ändere zu: </p>
<pre class="brush:sql;toolbar:false;">SELECT DAY(CREATED), count(*) FROM `transaction`
WO STATUS = 'genehmigt' UND MONAT(ERSTELLT) = 07 UND JAHR(ERSTELLT) = 2023 UND TAG(ERSTELLT) = 7
GRUPPE NACH TAG (ERSTELLT);
</pre>
<p> (Grundsätzlich wird <code>DAY(CREATED) = 7</code> zur Abfrage hinzugefügt)</p>
<p>Es wird die Anzahl für Tag 7 zurückgegeben.</p>
<p>Warum sind sie inkonsistent?
Wie kann ich dieses Problem in der ersten Abfrage lösen? </p>
<p>Vielen Dank im Voraus :)</p>
<p>Bearbeiten:
Beispiele für Tabellenstruktur und Daten: </p>
<pre class="brush:sql;toolbar:false;">CREATE TABLE `transaction` (
`ID` int NOT NULL,
`PLATFORM_ID` int NOT NULL,
`ENTITY_ID` int NOT NULL,
`RELATED_TRANSACTION_ID` int NOT NULL DEFAULT '0',
„ORIGIN_ID“ varchar(120) NICHT NULL,
`BANK` varchar(64) DEFAULT NULL,
„BETRAG“ doppelt NICHT NULL,
„WÄHRUNG“ varchar(3) NICHT NULL,
`TYPE` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
„ERSTELLT“ Datum/Uhrzeit NICHT NULL,
„CARD_NO“ varchar(20) DEFAULT NULL,
„CARD_BRAND“ varchar(45) DEFAULT NULL,
`CARD_EXPIRE_YEAR` int DEFAULT NULL,
`CARD_EXPIRE_MONTH` varchar(45) DEFAULT NULL,
`HOLDER_NAME` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
„EMAIL“ varchar(256) DEFAULT NULL,
`STATUS` enum('genehmigt', 'abgelehnt', 'gefiltert', 'ausstehend') ZEICHENSATZ utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`IS_3D` tinyint(1) STANDARD NULL,
`CREATED_AT` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
„BETRAG“ doppelt STANDARD NULL,
`IS_FRAUD` tinyint(1) NOT NULL DEFAULT '0',
`FRAUD_DATE` Datum DEFAULT NULL,
„KYC_DATE“ Datum/Uhrzeit STANDARD NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
</pre>
<p>Beispieleinfügung:</p>
<pre class="brush:sql;toolbar:false;">INSERT INTO `transaction` (`ID`, `PLATFORM_ID`, `ENTITY_ID`, `RELATED_TRANSACTION_ID`, `ORIGIN_ID`, `BANK`, `AMOUNT` , „CURRENCY“, „TYPE“, „CREATED“, „CARD_NO“, „CARD_BRAND“, „CARD_EXPIRE_YEAR“, „CARD_EXPIRE_MONTH“, „HOLDER_NAME“, „EMAIL“, „STATUS“, „IS_3D“, „CREATED_AT“, „ AMOUNTEUR`, `IS_FRAUD`, `FRAUD_DATE`, `KYC_DATE`) WERTE
(1, 1, 87, 0, '219114359', 'SOME BANK', 150, 'USD', 'DB', '2022-02-01 00:00:17', '000000XXXXXX0000', 'MasterCard', 2025 , '06', 'NAME FAMILIE', 'aaaaaaaaa@gmail.com', 'genehmigt', 0, '2022-08-25 13:12:58', 150.7605, 0, NULL, NULL);
</pre>
<p>Ich habe die Indexdefinition weggelassen, da ich glaube, dass sie in diesem Fall nicht relevant ist. </p>