mikebol Δημοσ. 23 Νοεμβρίου 2018 Δημοσ. 23 Νοεμβρίου 2018 Καλησπερα σε ολους, λοιπον εχω εναν πινακα με πωλησεις και στηλες (id, πελατης, ημερομηνια_παραλαβης, ημερομηνια_επιστροφης) και αλλο πινακα με στοιχεια του πελατη. Θελω να φτιαξω ενα query που να επιστρεφει, ποσοι πελατες ειχαν εστω μια παραλαβη ΚΑΘΕ μηνα.
leonidas_fs Δημοσ. 23 Νοεμβρίου 2018 Δημοσ. 23 Νοεμβρίου 2018 (επεξεργασμένο) Σε αυτούς του 2 πίνακες υπάρχει κοινός παρονομαστής το ID του πελάτη σωστά; Επίσης SQL ή MySQL; Επεξ/σία 23 Νοεμβρίου 2018 από leonidas_fs
leonidas_fs Δημοσ. 23 Νοεμβρίου 2018 Δημοσ. 23 Νοεμβρίου 2018 Εδω είσαι: http://www.postgresqltutorial.com/postgresql-inner-join/ Inner Join λέγεται αυτό που θέλεις!
mikebol Δημοσ. 23 Νοεμβρίου 2018 Μέλος Δημοσ. 23 Νοεμβρίου 2018 πως μπορω μεσω του inner join να δω ποιοι πελατες παρηγγειλαν καθε μηνα? Την ξερω την εντολή δεν ειμαι πολυ αρχαριος αλλα δεν μπορω να καταλαβω πως συνδεονται
mad-proffessor Δημοσ. 23 Νοεμβρίου 2018 Δημοσ. 23 Νοεμβρίου 2018 Θα κανεις το join statement και στο τέλος για την ημερομηνία θα κάνεις where date between 01/01/2018 and 01/31/2018 Δηλαδή select customer.customer.id, firstname, lastname,sale.sale_id, amount, date from customer inner join sale on customer.customer_id = sale.customer_id where... Κακως στα λέω πάντως πρέπει να τα κατανοήσεις!
mikebol Δημοσ. 23 Νοεμβρίου 2018 Μέλος Δημοσ. 23 Νοεμβρίου 2018 Μαλλον δεν εχω εκφρασει σωστα την ερωτηση, αφου δεν ειναι τοσο απλα. Θελω να ελεγξω αν ο πελατης "1" εχει κανει τουλάχιστον 1 παραγγελία μεταξυ 1/1 και 31/1, και 1/2 - 28/2 κοκ. Δήλαδη αν εχω την βαση για 50 μηνες για να μου εμφανίσει το query τους πελατες που εχουν κανει παραγγελια καθε εναν απο του 50 μηνες ξεχωριστά.
mad-proffessor Δημοσ. 23 Νοεμβρίου 2018 Δημοσ. 23 Νοεμβρίου 2018 Πες μας πως το σκέφτηκες οτι πρέπει να γίνει το ερώτημα.
mikebol Δημοσ. 23 Νοεμβρίου 2018 Μέλος Δημοσ. 23 Νοεμβρίου 2018 Δεν μπορω να σκεφτω την συνθηκη η οποια θα απομονώνει τους μηνες, ωστε να βρω τους πελατες που εχουν κανει παραγγελία. Αυτος ειναι και ο λογος που δημοσίευσα την απορια μου.
MitsarasAth Δημοσ. 23 Νοεμβρίου 2018 Δημοσ. 23 Νοεμβρίου 2018 SELECT * FROM Orders WHERE OrderDate BETWEEN '1996-07-01' AND '1996-07-31'; κατι παρομοιο εφαρμοζωντας ενα τζοιν
alou Δημοσ. 23 Νοεμβρίου 2018 Δημοσ. 23 Νοεμβρίου 2018 (επεξεργασμένο) Δεν χρειάζεται join, για αυτό που ζητάς όλη η πληροφορία είναι στο table που περιγράφεις. Η λογική είναι να γκρουπάρεις τις πωλήσεις ανά πελάτη, χρόνο και μήνα . Το αποτέλεσμα θα σου δώσεις ποιοί πελάτες είχαν έστω μία πώληση ανά μήνα. SELECT COUNT(salescolumn), customer_id FROM someTable GROUP BY customer_id, YEAR(date_column), MONTH(date_column) Αν θες να βρεις ποιοί πελάτες είχαν πωλήσεις σε κάθε μήνα και ξέρεις πόσους μήνες έχεις να ψάξεις, το count(salescolumn) θα πρέπει να είναι όσοι και οι μήνες, δηλαδή SELECT COUNT(salescolumn) as total, customer_id FROM someTable WHERE total >= ... GROUP BY customer_id, YEAR(date_column), MONTH(date_column) Στα τυφλά και με σύνταξη που δεν πρέπει να είναι valid postgres οπότε θα το ψάξεις λίγο παραπάνω. edit: άκυρο, το 2ο κομμάτι δεν ισχύει 😕 Επεξ/σία 23 Νοεμβρίου 2018 από alou 1
defacer Δημοσ. 23 Νοεμβρίου 2018 Δημοσ. 23 Νοεμβρίου 2018 Δύο τρόποι μου έρχονται για να γίνει αυτό που θες. Ένα, εισάγεις κάπου ένα πίνακα που σου χρειάζεται μόνο για το query. Βάζεις id, mindate, maxdate όπου τα dates είναι ανά μήνα, κάνεις join και με αυτό τον πίνακα on ανάμεσα στα dates και group by id mindate. Αυτό θα σου αφήσει εν τέλει ένα row για κάθε μήνα όπου το mindate είναι η πρώτη του μηνός. Αυτή η μέθοδος έχει το πλεονέκτημα πως αν θες, με κατάλληλο join μπορείς να πάρεις rows και για τα διαστήματα που δεν υπάρχουν δεδομένα. Δύο, χρησιμοποιείς ένα ενδιάμεσο temp table στο query όπου βάζεις ένα column να είναι year της ημερομηνίας των δεδομένων σου επί 12 + μήνας της ημερομηνίας των δεδομένων σου. Τώρα που το έχεις έτσι, μπορείς να κάνεις join με αυτόν και group by αυτό το column. Από την τιμή του στα αποτελέσματα μπορείς να βρεις και πάλι έτος και μήνα.
k33theod Δημοσ. 24 Νοεμβρίου 2018 Δημοσ. 24 Νοεμβρίου 2018 (επεξεργασμένο) Λέω μία ιδέα πως μπορείς να το κάνεις σαν πρόγραμμα όμως (Δεν ξέρω αν είναι εφαρμόσιμο με SQL) μπορείς όμως να το κάνεις με κάποια γλώσσα προγραμματισμού. 1. Παίρνεις τους πελάτες του κάθε μήνα ξεχωριστά δηλαδή για Ιανουάριο 2018 select Πελάτη if Ημερομηνία αγοράς Ιανουάριος, μετά το ίδιο για κάθε μήνα. Έχεις πχ 50 λίστες με id Πελατών 2. Τα κάνεις set (ίσως) Δεν χρειάζεται δηλαδή τον πελάτη 12 πχ να τον έχεις περισσότερες από μία φορές σε ένα μήνα. 3. Παίρνεις το intersection (τομή). Επειδή είναι Α τομή Β τομή Γ = (A τομή Β ) τομή Γ μπορείς να το κάνεις με recursion. Βοηθάει να αριθμήσεις τους μήνες που θες στον πίνακα σου ώστε να ρωτάς select Πελάτη if minas_αγοράς 1κλπ Ψευτοκώδικας monadikoi_pelates = set(select pelatis from table_agoron where minas_agoras ==1)//παιρνεις του πελατες του 1ου μήνα for i in range (2,max(minas_agoras)//παίρνεις την τομή με τους πελάτες κάθε επόμενου μήνα monadikoi_pelates = intersection (monadikoi_pelates, set(select pelatis from table where minas ==i)) Αυτοί που θα μείνουν είναι αυτοί που θες. Επεξ/σία 24 Νοεμβρίου 2018 από k33theod
pmav99 Δημοσ. 25 Νοεμβρίου 2018 Δημοσ. 25 Νοεμβρίου 2018 Στις 23/11/2018 στις 9:54 ΜΜ, mikebol είπε Μαλλον δεν εχω εκφρασει σωστα την ερωτηση, αφου δεν ειναι τοσο απλα. Θελω να ελεγξω αν ο πελατης "1" εχει κανει τουλάχιστον 1 παραγγελία μεταξυ 1/1 και 31/1, και 1/2 - 28/2 κοκ. Δήλαδη αν εχω την βαση για 50 μηνες για να μου εμφανίσει το query τους πελατες που εχουν κανει παραγγελια καθε εναν απο του 50 μηνες ξεχωριστά. Δεν ξέρω αν το καταλαβαίνω λάθος αλλά ένα απλό group by δεν είναι;... https://www.db-fiddle.com/f/xj9qTneZszZRsWqDJLqwPU/1
tolhc1234 Δημοσ. 25 Νοεμβρίου 2018 Δημοσ. 25 Νοεμβρίου 2018 https://www.db-fiddle.com/f/2wazLqJ5FWrv9qEx5arj1Z/2 Έβαλα 2 views που "κάνουν την δουλειά". Δεν είναι και πολύ κάλος τρόπος όπως το βλέπω αλλά δεν μπορούσα να σκεφτώ κάτι άλλο
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα