2015-03-04 12 views
0

J'ai deux colonnes de date dans le tableau (sqlite)Trouvez jours entre deux dates dans chaque trimestre

Maintenant, ce que j'ai besoin est de trouver nombre de jours apparaissent dans chaque trimestre entre ces deux dates

For example let's say, 

start_Date = 12-Jan-2015 
end_Date = 13-Jul-2015 

So result should be like: 

Quarter 1 = 79 days 
Quarter 2 = 91 days 
Quarter 3 = 13 days 
Quarter 4 = 0 days 

I avez essayé ci-dessous la requête

SELECT CASE WHEN cast(strftime('%%m', end_date) as integer) BETWEEN 1 AND 3 THEN 'Q1' WHEN cast(strftime('%%m', end_date) as integer) BETWEEN 4 and 6 THEN 'Q2' WHEN cast(strftime('%%m', end_date) as integer) BETWEEN 7 and 9 THEN 'Q3' ELSE 'Q4' END as Quarter, sum(julianday(end_date) - julianday(start_date) + 1) AS Total FROM table WHERE end_date BETWEEN '2015-01-01 00:00:00' AND '2015-12-31 00:00:00' GROUP BY Quarter 

Mais le problème est qu'il montrera tous les jours dans Quarter en considérant end_date. Donc, si le mois de end_date est 4, tous les jours seront affichés au troisième trimestre.

Toutes les suggestions sont les bienvenues. Soit sqlite query uniquement, soit ios SDK ou l'utilisation des deux. Dans n'importe quel scénario possible.

Merci .... !!

Répondre

1

Cela va être compliqué à faire en SQL, mais étant donné que vous l'avez marqué avec NSDateComponents, il semble que vous connaissiez les techniques de base dont vous avez besoin. Utilisez les méthodes fournies par NSDateComponentsNSCalendar:

  • Utilisez component:fromDate: pour obtenir l'année.

  • Calculez le début de Q1 en utilisant les composantes du mois de 1, jour de 1 et de l'année précédemment déterminée et en appelant dateFromComponents:.

  • boucle Maintenant, grâce à:

    • Calculer le début du trimestre suivant en ajoutant trois mois au début du trimestre à l'aide dateByAddingUnit (ou dateByAddingComponents si vous avez besoin pour soutenir les anciennes versions du système d'exploitation). Examinez les dates de début et de fin, en les comparant au début et à la fin du trimestre, pour déterminer combien de jours se produisent avec ce trimestre particulier (vous pouvez utiliser components:fromDate:toDate:options: pour compter le nombre de jours).

    • Répétez l'opération pour le prochain trimestre.

Ce sont les étapes de base.