Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

select zadnjih x iz svake grupe

[es] :: MySQL :: select zadnjih x iz svake grupe

[ Pregleda: 1700 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

MarkoBalkan

Član broj: 141124
Poruke: 1624
..136.240-dsl.net.metronet.hr.



+19 Profil

icon select zadnjih x iz svake grupe02.10.2010. u 19:00 - pre 164 meseci
iamo sam to negdje kao primjer, što mi je Bogdan pomogao.

imamo slijedeće: sportaše, sportove (discipline) i jednu veznu tablicu.
treba napisati query da izbaci 5 najboljih iz svakog sporta.

Code:

/*
SQLyog Community Edition- MySQL GUI v8.2 
MySQL - 5.1.49-community : Database - proba
*********************************************************************
*/


/*!40101 SET NAMES utf8 */;

/*!40101 SET SQL_MODE=''*/;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`proba` /*!40100 DEFAULT CHARACTER SET latin1 */;

USE `proba`;

/*Table structure for table `natjecatelj` */

DROP TABLE IF EXISTS `natjecatelj`;

CREATE TABLE `natjecatelj` (
  `ID` int(11) DEFAULT NULL,
  `ime` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

/*Data for the table `natjecatelj` */

insert  into `natjecatelj`(`ID`,`ime`) values (1,'marko'),(2,'alen'),(3,'ivo'),(4,'pero');

/*Table structure for table `rezultati` */

DROP TABLE IF EXISTS `rezultati`;

CREATE TABLE `rezultati` (
  `ID` int(11) DEFAULT NULL,
  `sport_id` int(11) DEFAULT NULL,
  `natjecatelj_id` int(11) DEFAULT NULL,
  `vrijeme` time DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

/*Data for the table `rezultati` */

insert  into `rezultati`(`ID`,`sport_id`,`natjecatelj_id`,`vrijeme`) values (1,1,1,'00:00:05'),(2,1,2,'00:00:06'),(3,1,3,'00:00:04'),(4,1,4,'00:00:03'),(5,2,1,'00:00:04'),(6,2,2,'00:00:08'),(7,2,3,'00:00:06');

/*Table structure for table `sport` */

DROP TABLE IF EXISTS `sport`;

CREATE TABLE `sport` (
  `ID` int(11) DEFAULT NULL,
  `sport` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

/*Data for the table `sport` */

insert  into `sport`(`ID`,`sport`) values (1,'100m'),(2,'200m'),(3,'skok u vis');

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;




ovo je moj query koji treba nadopuniti, sjećam se da je umjesto jednog polja bio select s uvjetom.
SELECT ime,sport,vrijeme FROM natjecatelj,sport,rezultati WHERE rezultati.sport_id=sport.id AND rezultati.natjecatelj_id=natjecatelj.id
ORDER BY sport,vrijeme



hvala

 
Odgovor na temu

MarkoBalkan

Član broj: 141124
Poruke: 1624
..136.240-dsl.net.metronet.hr.



+19 Profil

icon Re: select zadnjih x iz svake grupe02.10.2010. u 19:11 - pre 164 meseci
recimo može ovako, ali je malo nezgodno ako ih imamo više.


(SELECT ime,sport,vrijeme FROM natjecatelj,sport,rezultati WHERE rezultati.sport_id=sport.id AND rezultati.natjecatelj_id=natjecatelj.id
AND sport='100m' LIMIT 2)

UNION all

(SELECT ime,sport,vrijeme FROM natjecatelj,sport,rezultati WHERE rezultati.sport_id=sport.id AND rezultati.natjecatelj_id=natjecatelj.id
AND sport='200m' LIMIT 2)


 
Odgovor na temu

MarkoBalkan

Član broj: 141124
Poruke: 1624
..136.240-dsl.net.metronet.hr.



+19 Profil

icon Re: select zadnjih x iz svake grupe02.10.2010. u 19:32 - pre 164 meseci
ovo je view

Code:

DELIMITER $$

USE `proba`$$

DROP VIEW IF EXISTS `aa`$$

CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `aa` AS 
SELECT
  `natjecatelj`.`ime`   AS `ime`,
  `sport`.`sport`       AS `sport`,
  `rezultati`.`vrijeme` AS `vrijeme`
FROM ((`natjecatelj`
    JOIN `sport`)
   JOIN `rezultati`)
WHERE ((`rezultati`.`sport_id` = `sport`.`ID`)
       AND (`rezultati`.`natjecatelj_id` = `natjecatelj`.`ID`))
ORDER BY `sport`.`sport`,`rezultati`.`vrijeme`$$

DELIMITER ;



a ovo query, ali mi ne vraća prva 2 najbolja iz svake grupe
Code:

SET @num:=0, @vrijeme:='';

SELECT ime,sport,vrijeme,
    @num := IF(@sport = sport, @num + 1, 1) AS row_number,
        @sport :=sport AS h

FROM aa

GROUP BY vrijeme,sport,ime
HAVING row_number <= 2
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-a-1.sezampro.yu.



+33 Profil

icon Re: select zadnjih x iz svake grupe02.10.2010. u 21:30 - pre 164 meseci
A ovako nešto:
Code:
SET @idx:=0, @trenutni_sport:=0;

SELECT rezultat.ime, rezultat.sport, rezultat.vrijeme, 
   IF(@trenutni_sport != rezultat.sport_id, @idx:=1, @idx:=@idx+1) AS row_index, 
   IF(@trenutni_sport != rezultat.sport_id, @trenutni_sport:=rezultat.sport_id, 0) AS temp
FROM (
    SELECT n.ime AS ime, s.ID AS sport_id, s.sport AS sport, r.vrijeme AS vrijeme
    FROM natjecatelj n, sport s, rezultati r
    WHERE r.sport_id=s.id AND r.natjecatelj_id=n.id 
    ORDER BY s.ID, vrijeme
) AS rezultat
HAVING row_index <= 2
 
Odgovor na temu

MarkoBalkan

Član broj: 141124
Poruke: 1624
..136.240-dsl.net.metronet.hr.



+19 Profil

icon Re: select zadnjih x iz svake grupe02.10.2010. u 23:50 - pre 164 meseci
ne radi
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-3.sezampro.yu.



+33 Profil

icon Re: select zadnjih x iz svake grupe03.10.2010. u 10:52 - pre 164 meseci
Jel možeš malo da konkretizuješ to "ne radi"?

btw Evo sad sam kod mene probao taj upit nad podacima iz tvog prvog post-a, i kao rezultat dobijam ovo:
Code:
pero    100m     00:00:03     1     1
ivo     100m     00:00:04     3     0
marko   200m     00:00:04     1     2
ivo     200m     00:00:06     3     0

Ja mislim da je to ok.
 
Odgovor na temu

MarkoBalkan

Član broj: 141124
Poruke: 1624
...128.47-dsl.net.metronet.hr.



+19 Profil

icon Re: select zadnjih x iz svake grupe03.10.2010. u 12:46 - pre 164 meseci
koristim sqlyog i u njemu ne radi, probao u consoli i radi.

hvala
 
Odgovor na temu

[es] :: MySQL :: select zadnjih x iz svake grupe

[ Pregleda: 1700 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.