J'ai écrit des requêtes MySQL depuis longtemps, mais je me sens totalement comme un novice quand il s'agit de cela et je n'arrive pas à comprendre comment simplifier cette requête. Fondamentalement Je suis juste en train d'essayer de générer une liste de revenus délimités par des virgules de notre base de données qui finit par être branché sur Google Maps. Je dois en faire un pour "les 31 derniers jours" aussi, donc je suis un peu foutu à moins que je ne comprenne comment simplifier cela.MySQL Simplifier cette requête?
Mes colonnes de base de données dans ma table sont ...
- temps: Quand l'ordre est venu int() (format d'horodatage UNIX)
- prix: Dans quelle mesure l'ordre était pour décimal (10,2)
SELECT
CONCAT(
(SELECT SUM(price) FROM orders WHERE time < (UNIX_TIMESTAMP() - (6 * 86400)) AND time > (UNIX_TIMESTAMP() - (7 * 86400))),
',',
(SELECT SUM(price) FROM orders WHERE time < (UNIX_TIMESTAMP() - (5 * 86400)) AND time > (UNIX_TIMESTAMP() - (6 * 86400))),
',',
(SELECT SUM(price) FROM orders WHERE time < (UNIX_TIMESTAMP() - (4 * 86400)) AND time > (UNIX_TIMESTAMP() - (5 * 86400))),
',',
(SELECT SUM(price) FROM orders WHERE time < (UNIX_TIMESTAMP() - (3 * 86400)) AND time > (UNIX_TIMESTAMP() - (4 * 86400))),
',',
(SELECT SUM(price) FROM orders WHERE time < (UNIX_TIMESTAMP() - (2 * 86400)) AND time > (UNIX_TIMESTAMP() - (3 * 86400))),
',',
(SELECT SUM(price) FROM orders WHERE time < (UNIX_TIMESTAMP() - 86400) AND time > (UNIX_TIMESTAMP() - (2* 86400))),
',',
(SELECT SUM(price) FROM orders WHERE time > (UNIX_TIMESTAMP() - 86400))
) as chart_rev
FROM orders_basic
LIMIT 0,1
Si possible, je besoin par incréments de 24 heures comme celle-ci.
Comme toujours, toute aide est très appréciée. Merci!
SOLUTION
S'il vous plaît noter: Regardez attentivement vos résultats, ils peuvent être là, juste dans le mauvais ordre, le cas échéant, inverser votre tri.
SELECT GROUP_CONCAT(total_sum) AS sum_list FROM
(
SELECT
FLOOR((UNIX_TIMESTAMP() - time)/86400) AS date,
SUM(price) AS total_sum
FROM
orders_basic
WHERE
is_testorder < 1
AND FROM_UNIXTIME(time) > DATE_SUB(NOW(), INTERVAL 1 WEEK)
GROUP BY
date
) AS s
D'abord j'essaierais d'incorporer ['DATE_ADD()' et 'INTERVAL'] (http://dev.mysql.com/doc/refman/5.1/fr/date-and-time-functions.html#function_date- ajouter) qui est plus lisible. Ensuite, je voudrais essayer un ['GROUP_CONCAT()'] (http://dev.mysql.com/doc/refman/5.0/fr/group-by-functions.html#function_group-concat) sur la plage du mois et le groupe par le numéro du jour. – mellamokb
Merci de nous avoir montré ce que vous avez essayé, mais ce serait plus simple si vous nous montriez le schéma et la sortie désirée. –
@Marcus Adams, j'ai expliqué le schéma et dire quelle est ma sortie désirée. Je l'ai formaté plus clairement pour vous. Il n'y a que 2 colonnes. Un exemple de ce que je veux serait: 1.01,3,2,4.23 – PolishHurricane