2017-09-10 4 views
-1

En this question J'essayais de filtrer ma base de données par jour de la semaine et j'ai finalement trouvé une solution. Cependant, quand il y a des lacunes dans les données, afin d'obtenir au moins un registre par semaine, je devrais obtenir le registre du dernier jour disponible dans cette semaine.SQLite - obtenir le dernier jour de la semaine disponible quand il manque des vendredis

À titre d'exemple la déclaration pour mon nouveau problème retourne:

SELECT strftime('%W', date), date, stock FROM sales WHERE id=123 AND CAST (strftime('%w', date) AS Integer) = 5; 

Depuis que je dirige habituellement la déclaration par le C++ API Je vous serais reconnaissant que la solution colle avec une seule déclaration lorsque cela est possible.

Remarque: si vous exécutez l'instruction ci-dessus par l'API C++ s'il vous plaît noter que lors de la préparation de la déclaration de la '%w' variable strftime devrait être "%w" sinon il ne fonctionnera pas (il m'a fallu que je alors jusqu'à ce que je trouve le problème).

EDIT: ce sont par exemple les enregistrements:

données quotidiennes (semaine index | date | enregistrement):

09|2016-03-01|1219.0 
09|2016-03-02|1255.0 
09|2016-03-03|1298.0 
09|2016-03-04|1309.0 
10|2016-03-07|1344.0 
10|2016-03-08|1305.0 
10|2016-03-09|1304.0 
10|2016-03-10|1258.0 
10|2016-03-11|1298.0 
11|2016-03-14|1304.0 
11|2016-03-15|1274.0 
11|2016-03-16|1283.0 
11|2016-03-17|1315.0 
11|2016-03-18|1296.0 
12|2016-03-21|1286.0 
12|2016-03-22|1280.0 
12|2016-03-23|1246.0 
12|2016-03-24|1223.0 
13|2016-03-29|1214.0 
13|2016-03-30|1239.0 
13|2016-03-31|1220.0 
13|2016-04-01|1183.0 

hebdomadaire (de la requête ci-dessus):

09|2016-03-04|1309.0 
10|2016-03-11|1298.0 
11|2016-03-18|1296.0 
13|2016-04-01|1183.0 

Je voudrais tiens à obtenir ce qui suit:

09|2016-03-04|1309.0 
10|2016-03-11|1298.0 
11|2016-03-18|1296.0 
12|2016-03-24|1223.0 
13|2016-04-01|1183.0 
+0

Si vous avez une solution auto-réponse à un problème spécifique que vous devriez toujours coller avec le Q & A format requis ici. – user0042

+0

@ user0042 pourriez-vous s'il vous plaît être un peu plus constructif et dites-moi ce qui ne va pas avec ma question? – nopeva

+1

Il n'y a pas de question. Il y a un problème et vous avez donné une solution. Posez une question indiquant un problème spécifique et postez votre solution en guise de réponse. – user0042

Répondre

1

Il suffit d'utiliser le record avec la plus grande date de chaque indice de la semaine:

SELECT week_index, 
     MAX(date), 
     value 
FROM MyTable 
GROUP BY week_index;