Update συγκεκριμένη εγγραφή

Συζητήσεις για τον Microsoft SQL Server

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
txc
Δημοσιεύσεις: 626
Εγγραφή: 02 Δεκ 2003 23:08

Update συγκεκριμένη εγγραφή

Δημοσίευση από txc » 20 Δεκ 2012 19:43

Καλησπέρα παιδιά,
έχω το εξής πρόβλημα το οποίο θα περιγράψω με τον πίνακα για να μην μπερδευτούμε :

id parent_id date value
1 10 01/01/2012 0
2 10 02/01/2012 0
3 11 04/01/2012 0
4 11 03/01/2012 0


Θέλω να κάνω update το πεδίο value όμως για τη maximum date μόνο για κάθε group parent_id

δηλαδή θέλω να κάνω update το id=2 με value=1 μόνο για τη maximum ημερομηνία 02/01/2012

μετά για το επόμενο ίδιο parent_id να κάνω update το id=3 γιατί αυτή είναι η επόμενη μεγαλύτερη ημερομηνία για το group εγγραφών με parent_id=11

κλπ.

κάποια βοήθεια?
ευχαριστώ

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Update συγκεκριμένη εγγραφή

Δημοσίευση από gvre » 20 Δεκ 2012 20:29

Δοκίμασε κάτι τέτοιο

Κώδικας: Επιλογή όλων

UPDATE table SET `value`=1 WHERE parent_id=10 ORDER BY `date` DESC LIMIT 1;

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Update συγκεκριμένη εγγραφή

Δημοσίευση από dva_dev » 20 Δεκ 2012 20:36

Για δοκίμασε κάπως έτσι:

Κώδικας: Επιλογή όλων

UPDATE mytable
SET mytable.value = 1
WHERE mytable.id IN
(
	SELECT mytable.id 
	FROM mytable
	INNER JOIN
	(
		SELECT mytable.parent_id, MAX(mytable.date) maxdate
		FROM mytable
		GROUP BY mytable.parent_id
	) tmp
	ON (mytable.parent_id = tmp.parent_id AND mytable.date=tmp.maxdate)
)
Δεν έχω sql server εύκαιρο και δεν το έχω δοκιμάσει, αλλά το νόημα το πιάνεις.
Ισως να σηκώνει λίγο optimization αν μπορείς να βάλεις το inner join μέσα στο update για να αποφύγεις το in.

txc
Δημοσιεύσεις: 626
Εγγραφή: 02 Δεκ 2003 23:08

Update συγκεκριμένη εγγραφή

Δημοσίευση από txc » 20 Δεκ 2012 22:15

ευχαριστώ
το έτρεξα, πρέπει να είμαι οκ με του dva_dev

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Update συγκεκριμένη εγγραφή

Δημοσίευση από dva_dev » 20 Δεκ 2012 22:20

Σε Mysql που έχω τώρα πρόχειρη παίζει έτσι:

Κώδικας: Επιλογή όλων

UPDATE mytable
INNER JOIN
(
   SELECT id
   FROM mytable
   INNER JOIN
   (
      SELECT parent_id, MAX(date) maxdate
      FROM mytable
      GROUP BY parent_id
   ) tmp
   ON (mytable.parent_id = tmp.parent_id AND mytable.date=tmp.maxdate)
) tmp2
ON mytable.id=tmp2.id
SET value = 1;
του βρωμάει που μέσα στο select έχει τον ίδιο πίνακα που πάει να κάνει update... :evil:
Οπότε αναγκαστικά το κάνεις χωρίς in (select...)

Αν δεν κάνω λάθος με το ίδιο ακριβώς συντακτικό πρέπει να παίζει και σε ms sql server.

txc
Δημοσιεύσεις: 626
Εγγραφή: 02 Δεκ 2003 23:08

Update συγκεκριμένη εγγραφή

Δημοσίευση από txc » 20 Δεκ 2012 22:39

σε sql server έτρεξε μια χαρά το πρώτο

txc
Δημοσιεύσεις: 626
Εγγραφή: 02 Δεκ 2003 23:08

Update συγκεκριμένη εγγραφή

Δημοσίευση από txc » 22 Απρ 2014 19:40

να αναβιώσω ένα παλιό post,
στη περίπτωση που θέλω να τρέξω τη παρακάτω περίπτωση :

id parent_id user_id date value
1 10 1 01/01/2012 0
2 10 2 02/01/2012 0
3 11 5 04/01/2012 0
4 11 6 03/01/2012 0

ουσιαστικά έχει προστεθεί η στήλη user_id και τώρα θέλω να κάνω update το value για κάθε parent_id αλλά για μοναδικό user_id

σύμφωνα με το sql που είχαμε βρει θα πρέπει να τρέξω άλλο ένα join για να ξεχωρίσω τα user_id?

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Update συγκεκριμένη εγγραφή

Δημοσίευση από dva_dev » 22 Απρ 2014 22:11

Για δοκίμασε κάτι τέτοιο

Κώδικας: Επιλογή όλων

UPDATE mytable 
INNER JOIN 
( 
   SELECT id 
   FROM mytable 
   INNER JOIN 
   ( 
      SELECT parent_id, user_id, MAX(date) maxdate 
      FROM mytable 
      GROUP BY parent_id, user_id
   ) tmp 
   ON (mytable.parent_id = tmp.parent_id AND mytable.user_id = tmp.user_id AND mytable.date=tmp.maxdate) 
) tmp2 
ON mytable.id=tmp2.id 
SET value = 1;

txc
Δημοσιεύσεις: 626
Εγγραφή: 02 Δεκ 2003 23:08

Update συγκεκριμένη εγγραφή

Δημοσίευση από txc » 22 Απρ 2014 23:06

θα το τσεκάρω Πέμπτη και θα σου πω
ευχαριστώ για το χρόνο σου

Απάντηση

Επιστροφή στο “MS SQL Server”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες