Ceci est le Détails de la transaction Tableau
J'essaie de Concevez une base de données d'inventaire MySQL.
Je considère tous les La colonne code> code> est Comment puis-je obtenir ce résultat: p> type: 1 code> rangez un lot de produit (lot). p> 1 code> pour IN et 0 code> pour chaque transaction.
détaillant_id code> fait référence à la colonne code> ID code>. p> id item sum(quantity)
1 1 3 [10-(5+2)]
4 1 0 (5-5)
6 2 20 20
3 Réponses :
WITH cte AS (
SELECT *,
SUM(detail_id IS NULL) OVER (PARTITION BY item ORDER BY id) group_num
FROM details
)
SELECT MIN(id) id,
item,
SUM( CASE type WHEN 1 THEN quantity
WHEN 0 THEN -quantity
END ) `sum(quantity)`
FROM cte
GROUP BY item, group_num;
fiddle
Performance sage entre votre réponse et @sebastian Brosch's qu'est-ce que vous pensez le mieux?
@GRIMDBX Test sur la matrice de données réelle. Enquêter sur les plans d'exécution. Créer des indices appropriés. Personne ne peut répondre, il vaut mieux avoir aucune information source ...
Vous pouvez utiliser ceci:
SELECT lots.id, MIN(lots.item) AS item, MIN(lots.quantity) - IFNULL(SUM(details.quantity), 0) AS quantity FROM ( SELECT id, item, quantity FROM details WHERE type = 1 ) lots LEFT JOIN details ON lots.id = details.detail_id GROUP BY lots.id ORDER BY lots.id
Veuillez expliquer le résultat de votre requête sur un Fiddle avec des données source mises à jour.
Vous avez ajouté des 3 premières lignes à nouveau, où les 2e et 3ème rangées ont détaillé_id qui fait référence à la toute première ligne ( ID 1 code>) afin que le calcul est de 10- (5 + 2 + 5 + 2) = - 4 .
J'ai modifié votre Fiddle . J'ai changé que l'on pense à votre table existante, vous devez spécifier détaillant_id, où qu'il soit null, afin que nous puissions regrouper le résultat à ce sujet.
La requête finale ressemblera à p> Obtenir la somme de la quantité de type spécifiée en regroupant sur détaillant_id, élément, puis utilisez ce résultat pour calculer la sortie finale. < / p> p>
Je devrais faire une mise à jour supplémentaire sur les lignes en lignes pour insérer l'ID incrémenté automatique.
Sans cela comment identifiez-vous le détaillant correspondant?
Vérifiez @ la réponse d'Akina ci-dessus.
Quel attribut définit l'ordre des enregistrements dans un groupe avec le même article
code>? "Commande de position" est une mauvaise réponse ... CANID CODE> Soyez cet attribut?