IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Vendredi dernier jour du mois


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Employé
    Inscrit en
    Octobre 2013
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Employé
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2013
    Messages : 51
    Par défaut Vendredi dernier jour du mois
    Bonjour à toutes et tous

    J'ai un script php qui, couplé à une Bdd Mysql, me permet de comptabiliser les heures travaillées, sous forme de calendrier.
    Nom : Screenshot_20170723_111615.png
Affichages : 396
Taille : 117,5 Ko

    L'idée étant de compter les heures sup . Ce que j'arrive à faire grâce à la commande suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $reqsumweek2 = "SELECT SEC_TO_TIME( SUM( TIME_TO_SEC( TIMEDIFF( endtime, starttime ) ) ) ) AS TS FROM calendar_events WHERE DATE_FORMAT(CONCAT(YEAR,'-',MONTH,'-',DAY),'%u') = $nums and YEAR = $year";
    Ca fonctionne très bien puisque je demande par numéro semaine.

    Mon souci est le suivant :

    prenons pour exemple la copie écran jointe
    La semaine 26 inclue la fin du mois de juin, et samedi dimanche de juillet.
    Le mois de juin s'est terminé donc, un vendredi, et les heures déclarées vont donc jusqu'à ce vendredi.
    En juillet, inutile donc, de reprendre les heures sup déclarées avant.

    Comment faire donc pour effectuer la requete demandant la même chose et incluant le fait que le mois précédant c'est terminé un vendredi ?
    Je ne sais pas si je suis très clair

    Cordialement

    Eric Eychenne

  2. #2
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 924
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 924
    Par défaut
    Salut eeychenne.

    Citation Envoyé par eeychenne
    Comment faire donc pour effectuer la requete demandant la même chose et incluant le fait que le mois précédant c'est terminé un vendredi ?
    Je ne sais pas si je suis très clair
    Aucun problème de compréhension.

    Autrement dit, vous désirez obtenir une semaine à cheval sur deux mois.

    Partons de votre requête ci-après :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT   SEC_TO_TIME( SUM( TIME_TO_SEC( TIMEDIFF( endtime, starttime ) ) ) ) AS TS
      FROM   calendar_events
     WHERE   DATE_FORMAT(CONCAT(YEAR,'-',MONTH,'-',DAY),'%u') = $nums and YEAR = $year";
    Je vous donne ci-après une table composée de plusieurs lignes où il faudra faire le cumul des heures travaillées par jour.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    --------------
    SET AUTOCOMMIT = 0
    --------------
     
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `calendrier`
    --------------
     
    --------------
    CREATE TABLE `calendrier`
    ( `matricule`  integer unsigned  NOT NULL,
      `date`       date              NOT NULL,
      `starttime`  time              NOT NULL,
      `endtime`    time              NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `calendrier` (`matricule`,`date`,`starttime`,`endtime`) values
      (12, '2017-05-28', '08:00:00', '17:10:00'),
      (25, '2017-05-28', '08:15:00', '16:45:00'),
      (12, '2017-05-29', '08:10:00', '17:00:00'),
      (25, '2017-05-29', '08:15:00', '17:10:00'),
      (12, '2017-05-30', '08:05:00', '17:05:00'),
      (25, '2017-05-30', '08:20:00', '17:35:00'),
      (12, '2017-05-31', '08:00:00', '17:05:00'),
      (25, '2017-05-31', '07:45:00', '17:15:00'),
      (12, '2017-06-01', '08:15:00', '16:45:00'),
      (25, '2017-06-01', '08:00:00', '17:05:00'),
      (12, '2017-06-02', '08:10:00', '18:00:00'),
      (25, '2017-06-02', '07:40:00', '17:05:00'),
      (12, '2017-06-03', '08:00:00', '17:10:00'),
      (25, '2017-06-03', '08:05:00', '17:00:00'),
      (12, '2017-06-04', '08:05:00', '17:20:00'),
      (25, '2017-06-04', '08:10:00', '17:15:00'),
      (12, '2017-06-05', '08:00:00', '17:10:00'),
      (25, '2017-06-05', '08:20:00', '17:05:00')
    --------------
     
    --------------
    select * from `calendrier`
    --------------
     
    +-----------+------------+-----------+----------+
    | matricule | date       | starttime | endtime  |
    +-----------+------------+-----------+----------+
    |        12 | 2017-05-28 | 08:00:00  | 17:10:00 |
    |        25 | 2017-05-28 | 08:15:00  | 16:45:00 |
    |        12 | 2017-05-29 | 08:10:00  | 17:00:00 |
    |        25 | 2017-05-29 | 08:15:00  | 17:10:00 |
    |        12 | 2017-05-30 | 08:05:00  | 17:05:00 |
    |        25 | 2017-05-30 | 08:20:00  | 17:35:00 |
    |        12 | 2017-05-31 | 08:00:00  | 17:05:00 |
    |        25 | 2017-05-31 | 07:45:00  | 17:15:00 |
    |        12 | 2017-06-01 | 08:15:00  | 16:45:00 |
    |        25 | 2017-06-01 | 08:00:00  | 17:05:00 |
    |        12 | 2017-06-02 | 08:10:00  | 18:00:00 |
    |        25 | 2017-06-02 | 07:40:00  | 17:05:00 |
    |        12 | 2017-06-03 | 08:00:00  | 17:10:00 |
    |        25 | 2017-06-03 | 08:05:00  | 17:00:00 |
    |        12 | 2017-06-04 | 08:05:00  | 17:20:00 |
    |        25 | 2017-06-04 | 08:10:00  | 17:15:00 |
    |        12 | 2017-06-05 | 08:00:00  | 17:10:00 |
    |        25 | 2017-06-05 | 08:20:00  | 17:05:00 |
    +-----------+------------+-----------+----------+
    --------------
    select    matricule,
              mois,
              semaine,
              sec_to_time(sum(duree)) as duree
        from  (  select  matricule,
                         date_format(`date`, '%Y-%m') as mois,
                         date_format(`date`, '%Y-%v') as semaine,
                         time_to_sec(timediff(endtime, starttime)) as duree
                   from  calendrier
               order by  matricule
              ) as x
    group by  matricule, mois, semaine
    --------------
     
    +-----------+---------+---------+----------+
    | matricule | mois    | semaine | duree    |
    +-----------+---------+---------+----------+
    |        12 | 2017-05 | 2017-21 | 09:10:00 |
    |        12 | 2017-05 | 2017-22 | 26:55:00 |
    |        12 | 2017-06 | 2017-22 | 36:45:00 |
    |        12 | 2017-06 | 2017-23 | 09:10:00 |
    |        25 | 2017-05 | 2017-21 | 08:30:00 |
    |        25 | 2017-05 | 2017-22 | 27:40:00 |
    |        25 | 2017-06 | 2017-22 | 36:30:00 |
    |        25 | 2017-06 | 2017-23 | 08:45:00 |
    +-----------+---------+---------+----------+
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 1
    --------------
     
    Appuyez sur une touche pour continuer...
    Pour résoudre ce problème, il suffit d'introduire le mois et la semaine.
    La comptabilisation se fera en tenant compte de la semaine qui sera à cheval sur deux mois.
    Dans l'exemple ci-dessous, la semaine 22 est à cheval sur le mois de mai et de juin.
    J'espère avoir répondu à votre attente.

    @+

Discussions similaires

  1. dernier jour du moi
    Par lazzeroni dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 11/09/2006, 14h34
  2. [Dates] Premier et dernier jour du mois
    Par Jarodd dans le forum Langage
    Réponses: 6
    Dernier message: 04/08/2006, 10h52
  3. Dernier jour du mois
    Par jane_ng dans le forum Langage
    Réponses: 13
    Dernier message: 03/08/2006, 12h43
  4. Dernier Jours du mois en cours
    Par paradeofphp dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 29/06/2006, 19h55
  5. premier et dernier jour du mois
    Par oneill701 dans le forum Bases de données
    Réponses: 9
    Dernier message: 21/06/2006, 11h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo