Trier par Date en SQL
J'ai un tableau des ressources, l'un des champs est un champ de date avec le Type de Données de date. Je veux avoir à la sortie suivante:
Mois en cours les dossiers (dites Peut - année n'est pas important)
Alors la suite (encore une fois, en supposant que Mai est le mois en cours)
- Juin Enregistrements
- Juillet Enregistrements
- Août Enregistrements
- Septembre Enregistrements
- Octobre Dossiers
- Novembre Enregistrements
- Décembre Enregistrements
- Janvier Enregistrements
- Février Enregistrements
- Mars Dossiers
- Avril Enregistrements
Viennent juin, le mois de juin est le mois en cours et ensuite, la commande serait:
- Juillet Enregistrements
- Août Enregistrements
- ...
Voici mon SQL...je ne sais pas comment faire pour COMMANDER la production pour atteindre l'ordre souhaité (5,6,7,8,9,10,11,12,1,2,3,4):
SELECT
resource_id,
resource_title,
resource_summary,
resource_category,
resource_status,
resource_date,
DATEPART(month, resource_date) AS resource_month,
DATEPART(day, resource_date) AS resource_day
FROM dbo.resources
WHERE (resource_category = N'Quotes')
AND (resource_status <> N'Draft')
J'ai trouvé cette solution pour MySQL:
mais il me manque quelque chose sur ma fin.
- Oui, SQL Server 2008
Vous devez vous connecter pour publier un commentaire.
Le premier terme définit la primaire commande d'ici le mois de
resource_date
(le mois en cours sera le premier, le précédent, le dernier). Le second terme commandes les horodateurs dans un mois, quelle que soit l'année de la date. Si vos dates ne contiennent pas de parties heure ou si le temps, les pièces sont absolument hors de propos, vous pouvez le remplacer avecDAY(resource_date)
. Enfin, le dernier terme de l'année en compte autrement des dates identiques (pourrait aussi être simplementresource_date
).dbo.qry_resources_quotes
(qui, je suppose, est défini par la requête précédente, laSELECT TOP (100) PERCENT...
un).CREATE VIEW
:Note. The ORDER BY clause is used only to determine the rows that are returned by the TOP clause in the view definition. The ORDER BY clause does not guarantee ordered results when the view is queried, unless ORDER BY is also specified in the query itself.
Que ça va marcher pour vous?
ORDER BY
CASE DATEPART(month, resource_date)
WHEN 5 THEN 0
WHEN 6 THEN 1
... etc
END
Je pense que quelque chose comme cela pourrait être ce que vous cherchez:
Comment 'bout
ORDER BY (DATEPART(month,resource_date) - (DATEPART(month,getdate() -1)) % 12)
Donc en Mai (5 mois), vous commandez d'ici le mois de la ligne -6 (mod 12). Ainsi, au mois de juin (6 mois) 0, juillet (7) serait de 1.
En juin, juillet 0, etc.
Vous devriez être en mesure d'adapter la base de la solution, en utilisant
PARTIE
en place deDATE_FORMAT
:Je n'ai pas de SQL Server pratique donc je ne sais pas si il va être heureux avec un boolean dans la clause ORDER BY si. Si il n'aime pas la booléennes de COMMANDE, puis un CAS devrait faire l'affaire:
Je suppose qu'il y a un an, dans les "resource_date" - n'est-ce pas?
Dans ce cas, vous pouvez simplement le filtre et ordre par
Si il n'y a pas d'année (ou plus exactement: les différentes inconnues ans) vous pouvez le faire:
Espère que ça a aidé ...