2017-03-23 3 views
1

J'ai un grand ensemble de données couvrant plusieurs années et j'ai de la difficulté à obtenir une chaîne comme "53-2016" (semaine 53 en 2016).MySQL sélectionnant le numéro de la semaine et l'année cause des problèmes avec la dernière semaine de l'année

Ma requête est:

SELECT 
    date, 
    DATE_FORMAT(date, "%v-%Y") AS week,  
FROM myTable 
GROUP BY week 
ORDER BY date; 

En utilisant cette requête, je reçois deux lignes où je voudrais avoir qu'une seule. Ceci est dû à GROUP BY week. À la fin de 2015 les dates: 28-31 décembre sont ajoutées à la semaine 53-2015 où le reste de la semaine (1-3 janvier) s'ajoute à une rangée appelée 53-2016.

Y a-t-il un moyen pour que je puisse ajouter les trois premiers jours de janvier au groupe 53-2015?

Répondre

0

J'ai fini par le découvrir par moi-même.

Il s'avère que MySQL a une deuxième façon d'imprimer l'année en DATE_FORMAT().

% x - Année pour la semaine où lundi est le premier jour de la semaine, quatre chiffres, utilisé avec% v

Ce résolu à problème, et ma requête a fini comme:

SELECT 
    date, 
    DATE_FORMAT(date, "%v-%x") AS week,  
FROM myTable 
GROUP BY week 
ORDER BY date; 
0

Oui, vous pouvez le faire. Effectuez les opérations suivantes

SELECT 
    date, 
    DATE_FORMAT(DATE_SUB(date, INTERVAL MOD(DAYOFWEEK(`date`) +5,7) DAY), "%v-%Y") AS week 
FROM myTable 
GROUP BY week 
ORDER BY date; 

Cette questionnera jour de la semaine, et soustrayez les jours pour tous les jours est essentiellement tronquée à la précédente lundi

0

Qu'en est-il quelque chose comme ça (faire plus tester ...)?

#DROP TABLE TT1; 
CREATE TABLE TT1 (date datetime); 

INSERT INTO TT1 values ('2015-12-31'); 
INSERT INTO TT1 values ('2016-01-01'); 
SELECT 
    date, 
    CONCAT(DATE_FORMAT(date, "%v") , '-', CASE WHEN DATE_FORMAT(date, "%v")>52 AND DATE_FORMAT(date, "%m")=1 THEN DATE_FORMAT(date, "%Y")-1 ELSE DATE_FORMAT(date, "%Y") END) AS week  
FROM TT1; 

DROP TABLE TT1; 

Sortie:

date week 
1 31.12.2015 00:00:00 53-2015 
2 01.01.2016 00:00:00 53-2015 
+0

Merci pour la réponse. Votre requête a des problèmes avec la semaine de 2016 à 2017, mais j'ai réussi à résoudre mon problème et j'ai posté une réponse. – Frederik