La première étape consiste à créer une table Calendrier dans votre base de données et à l'utiliser dans vos requêtes.
ÉTAPE 1:
Faites une requête MySQL avec des limites de date comme une date arbitraire dans l'avenir (31 décembre 2040) et le début de cette année ou peut-être 2013 (1er janvier 2014)
SELECT datediff('2040-12-31','2014-01-01');
Vous aurez besoin de la valeur que cette requête vous donne. Le retour requête ci-dessus 9861.
STEP 2:
Maintenant, créez la table de calendrier réel. Vous aurez besoin de dates non seulement, mais aussi les différents domaines qui peuvent être utilisés pour définir des données supplémentaires associées à chaque date, comme les vacances, week-ends, jours de paie, etc.
CREATE TABLE calendar (
dt DATE NOT NULL PRIMARY KEY,
y SMALLINT NULL,
q tinyint NULL,
m tinyint NULL,
d tinyint NULL,
dw tinyint NULL,
monthName VARCHAR(9) NULL,
dayName VARCHAR(9) NULL,
w tinyint NULL,
isWeekday BINARY(1) NULL,
isHoliday BINARY(1) NULL,
holidayDescr VARCHAR(32) NULL,
isPayday BINARY(1) NULL
);
ÉTAPE 3:
Peupler la table
CREATE TABLE ints (i tinyint);
INSERT INTO ints VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
INSERT INTO calendar (dt)
SELECT DATE('2010-01-01') + INTERVAL a.i*10000 + b.i*1000 + c.i*100 + d.i*10 + e.i DAY
FROM ints a JOIN ints b JOIN ints c JOIN ints d JOIN ints e
WHERE (a.i*10000 + b.i*1000 + c.i*100 + d.i*10 + e.i) <= 9861 #VALUE GOTTEN EARLIER
ORDER BY 1;
Fondamentalement, cette table renseigne la valeur dont vous avez besoin. Il y a d'autres choses à faire pour remplir la table avec les valeurs de salaire, vacances, etc.
vous pouvez exécuter une requête comme:
SELECT `count(id)` as `nbid`, `date`,
(SELECT COUNT(*)
FROM `calendar`
WHERE `dt` > `date`
) AS `somethingdate`
FROM `archives`;
Envisager de fournir DDLs appropriés (et/ou un sqlfiddle) ENSEMBLE AVEC LA RÉSULTAT DÉSIRÉ – Strawberry