====== Magie Noire En SQL ====== Il vous faut un accès en ligne de commande sur le NAS, et lancer MySQL avec ''mysql -A -u USER -pPASS Rivendell'' Vous allez devoir adapter le nom des scheduler codes, machines, etc. Dans les requêtes ci-dessous : * le client rivendell s'appelle ''auto'' * le service s'appelle ''saison1234'' (il faut parfois y ajouter un suffixe, par exemple sur la table ''saison1234_SRT'') * le groupe des cartouches musicales est ''MUSIQUE'' * les scheduler codes sont en ''Mu'', par exemple ''MuFR'' Pour affiner les conditions, vous pouvez aussi utiliser [[https://mariadb.com/kb/en/library/date-time-functions/|les fonctions de date et heure de MariaDB]]. ===== Combien de morceaux/temps diffusés ===== Ici en Français, un 10 Février 2018 entre minuit et 18h. Retirez la ligne avec la condition ''MuFR'' pour avoir ces chiffres sur toute la musique, puis faites la division pour connaître votre score au quota francophone. SELECT COUNT(l.ID) AS nbTitres, COUNT(DISTINCT l.CART_NUMBER) AS nbTitres_distincts, SUM(l.LENGTH)/3600000 AS heures FROM saison1234_SRT l JOIN CART c ON l.CART_NUMBER = c.NUMBER WHERE `STATION_NAME`='auto' AND GROUP_NAME = 'MUSIC' AND c.SCHED_CODES LIKE '%MuFR%' AND '2018-02-10 00:00:00' <= `EVENT_DATETIME` AND `EVENT_DATETIME` <= '2018-02-10 17:59:00'; Pour sortir la même stat mais par jour, uniquement entre 6 et 18h : SELECT COUNT(l.ID) AS nbTitres, COUNT(DISTINCT l.CART_NUMBER) AS nbTitres_distincts, SUM(l.LENGTH)/3600000 AS heures, DATE(`EVENT_DATETIME`) FROM saison1234_SRT l JOIN CART c ON l.CART_NUMBER = c.NUMBER WHERE `STATION_NAME`='auto' AND c.GROUP_NAME = 'MUSIC' AND c.SCHED_CODES LIKE '%MuFR%' AND 6 <= HOUR(`EVENT_DATETIME`) AND HOUR(`EVENT_DATETIME`) < 18 GROUP BY DATE(`EVENT_DATETIME`) On peut aussi grouper par mois plutôt que par jour, et sortir juste la moyenne: SELECT AVG(nbTitres_distincts) AS nbTitresDifferentsParMois FROM( SELECT COUNT(DISTINCT l.CART_NUMBER) AS nbTitres_distincts FROM saison1234_SRT l JOIN CART c ON l.CART_NUMBER = c.NUMBER WHERE `STATION_NAME`='auto' AND c.GROUP_NAME = 'MUSIC' AND 6 <= HOUR(`EVENT_DATETIME`) AND HOUR(`EVENT_DATETIME`) < 18 GROUP BY MONTH(`EVENT_DATETIME`) ) AS sub; Ensuite allez vous gausser de passer 10x plus de titres différents que NRJ. ===== Nombre de musiques ajoutées depuis une date donnée ===== Pour savoir si les programmateurs font le taf ! Vous pouvez retirer la ligne avec la condition qui filtre par sched code. SELECT COUNT(*) AS nbMusiquesAjoutees FROM CART c JOIN CUTS u ON u.CART_NUMBER=c.NUMBER WHERE c.GROUP_NAME = 'MUSIC' AND c.SCHED_CODES LIKE '%MuFR%' AND u.ORIGIN_DATETIME >= '2017-09-01 00:00:00' ; ===== Exporter un fichier "playlist de l'année passée" ===== Si votre table SRT est reglée pour conserver toute l'année, bien sûr. mysql -h HOST -p PASS -u USER Rivendell -e "SELECT `EVENT_DATETIME`,`CART_NUMBER`,`ARTIST`,`TITLE` FROM `saison1234_SRT` WHERE '2016-05-02 07:00:00' <= `EVENT_DATETIME` AND `EVENT_DATETIME` <= '2016-05-02 13:00:00' AND `STATION_NAME`='auto' ORDER BY EVENT_DATETIME ASC" > playlist_saison1234.txt ===== Rotation des nouveautés ===== Dans RDLibrary il est possible de sélectionner de nombreux carts (shift+click), puis de cliquer sur “Edit” et “Scheduler codes” pour ajouter/retirer un scheduler code à tous les carts sélectionnés. Cela permet par exemple de retirer un code ''Recent'' sur des titres devenus anciens, en se basant sur le fait que les numéros de cart sont vaguement croissants dans le temps. Mais quel est le n° de cart limite ? Mais comment trouver quel est le plus grand n° de cart tel quel tous les carts inférieurs soient plus vieux de 3 mois ? La solution : SELECT MAX(a.NUMBER), COUNT(a.NUMBER) FROM CART a, CUTS u WHERE u.CART_NUMBER=a.NUMBER AND a.GROUP_NAME='MUSIC' AND u.ORIGIN_DATETIME < TIMESTAMPADD(MONTH,-3,NOW());