tiffgraf Δημοσ. 7 Μαρτίου 2011 Δημοσ. 7 Μαρτίου 2011 Καλησπέρα σε όλους και καλή Σαρακοστή. Θέλω να ρωτήσω επάνω στην sql όποιον ξέρει σε περιβάλλον oracle να μου δώσει μια ιδέα για το πως θα κινηθώ στο να σχηματίσω ένα ερώτημα για έναν πίνακα στην περίπτωση που: Ας πούμε πως έχω έναν πίνακα με βιβλία. Κάθε βιβλίο παίρνει μοναδικό κωδικό όταν καταχωρείται ο οποίος είναι και το κλειδί. Στον πίνακα εισάγουμε και την ημερομηνία εγγραφής. Θέλω να κοιτάξω αν για την ίδια ημερομηνία έχουν γίνει παραπάνω από μία εγγραφές και να εμφανίσω ως αποτέλεσμα του ερωτήματος εφόσον υπάρχουν μόνο την συγκεκριμένη ημερομηνία και τους κωδικούς βιβλίων που αντιστοιχούν σε αυτή. Μέχρι στιγμής έχω κατορθώσει να βρίσκω το πλήθος των εγγραφών που αντιστοιχούν σε μία ημερομηνία και να δείχνω τον αριθμό τους και την ημερομηνία αλλά εγώ θέλω την ημερομηνία και όχι το πλήθος αλλά τους κωδικούς. Κάθε βοήθεια ευπρόσδεκτη ευχαριστώ πολύ.
At0m0 Δημοσ. 7 Μαρτίου 2011 Δημοσ. 7 Μαρτίου 2011 SELECT 'date', 'code', 'book_name' FROM my_table WHERE 'date' = '2011-03-07'; αυτό δεν κάνει; (συντακτικά λάθη και πώς συγκρίνεις με την ημερομηνία.... δεν με ενδιαφέρουν )
tiffgraf Δημοσ. 7 Μαρτίου 2011 Μέλος Δημοσ. 7 Μαρτίου 2011 SELECT 'date', 'code', 'book_name' FROM my_table WHERE 'date' = '2011-03-07'; αυτό δεν κάνει; (συντακτικά λάθη και πώς συγκρίνεις με την ημερομηνία.... δεν με ενδιαφέρουν ) Καταρχήν ευχαριστώ πολύ για την απάντηση και που ασχολήθηκες αλλά δεν ζητάω αυτό. Αυτό που θέλω είναι να αντιστοιχήσω το count των κωδικών με την ημερομηνία. Δηλαδή αντί να πάρω πχ Ημερομηνία Κωδικοί 17-03-05 3 Να βγάλω Ημερομηνία Κωδικοί 17-03-05 0001 17-03-05 0002 17-03-05 0003 Γίνεται με κάποιο υποερώτημα; Κάποια εντολή; Δεν γίνεται καθόλου;
Crizzt Δημοσ. 7 Μαρτίου 2011 Δημοσ. 7 Μαρτίου 2011 Μα αυτο που θες γινεται με το query που εγραψε o At0m0
bab_is Δημοσ. 8 Μαρτίου 2011 Δημοσ. 8 Μαρτίου 2011 Δοκίμασε κάτι τέτοιο: SELECT col_1, col_2, col_3, COUNT(*) FROM my_table GROUP BY col_1, col_2, col_3 HAVING COUNT(*) > 1;
random Δημοσ. 9 Μαρτίου 2011 Δημοσ. 9 Μαρτίου 2011 υποθέτω οτι δεν ξέρει την ημερομηνία ('2011-03-07'), αλλα θελει να τη βρει πρωτα. οποτε δεν μπορει να την περασει σαν κριτηριο στο παραδειγμα #2 και μπορει να μην ειναι 1 ημερομηνια αλλα πολλες. και θελει ολα να γινουν με 1 statement. αν ηθελα αυτα ^, θα εκανα αυτο: > SELECT CREATED_DT, BOOK_ID FROM BOOKTABLE where TRUNC(CREATED_DT) in ( select dt1 from ( SELECT TRUNC(CREATED_DT) dt1, COUNT(1) FROM BOOKTABLE GROUP BY TRUNC(CREATED_DT) HAVING COUNT(1) > 1 ) ) order by CREATED_DT, BOOK_ID * αν η ημερομηνιες καταχώρησης CREATED_DT περιέχουν και ώρα:λεπτά:δεύτερα , χρησιμοποιείς το TRUNC(CREATED_DT) για να ομαδοποιησει ολες τις εγγραφες τις ιδιας μερας. αλλιως δεν χρειαζεται το trunc()
lefterhs Δημοσ. 9 Μαρτίου 2011 Δημοσ. 9 Μαρτίου 2011 υποθέτω οτι δεν ξέρει την ημερομηνία ('2011-03-07'), αλλα θελει να τη βρει πρωτα. οποτε δεν μπορει να την περασει σαν κριτηριο στο παραδειγμα #2 και μπορει να μην ειναι 1 ημερομηνια αλλα πολλες. και θελει ολα να γινουν με 1 statement. αν ηθελα αυτα ^, θα εκανα αυτο: > SELECT CREATED_DT, BOOK_ID FROM BOOKTABLE where TRUNC(CREATED_DT) in ( select dt1 from ( SELECT TRUNC(CREATED_DT) dt1, COUNT(1) FROM BOOKTABLE GROUP BY TRUNC(CREATED_DT) HAVING COUNT(1) > 1 ) ) order by CREATED_DT, BOOK_ID * αν η ημερομηνιες καταχώρησης CREATED_DT περιέχουν και ώρα:λεπτά:δεύτερα , χρησιμοποιείς το TRUNC(CREATED_DT) για να ομαδοποιησει ολες τις εγγραφες τις ιδιας μερας. αλλιως δεν χρειαζεται το trunc() Αυτό που γράφεις, προϋποθέτει ότι θα υπάρχουν rows με ημερομηνία αλλά χωρίς book_id, τις οποίες δε θες να εμφανίσεις, κάτι που με όσα έχει πει ως τώρα δε γίνεται, γιατί το book_id είναι primary key. Αφού αυτό δε γίνεται, το query που αναφέρει το παιδί στο 1ο reply είναι το σωστό, με όσα έχω καταλάβει ως τώρα. Αν μας εξηγήσει λίγο καλύτερα τι θέλει να κάνει, θα τον βοηθήσουμε.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.