繁体   English   中英

从按日期分组的两个表中选择

[英]Select from two tables with group by date

我有两张桌子:

表 t1:

id | date_click
 1 | 2016-02-31 17:17:23
 2 | 2016-03-31 12:11:21
 3 | 2016-03-31 13:13:23

因此,我想从这张表中获取每天的计数字段Id

为此,我使用下一个查询:

SELECT date_format(date_click, '%Y-%m-%d') as date_click_event
     , COUNT(id) as count_click 
  FROM t1 
 GROUP 
    BY date_click_event 
 ORDER 
    BY date_click_event DESC;

它的工作很好。

所以下一张桌子是t2。

id | count | date_sent
 1 |    33 | 2016-02-31 11:12:23
 2 |    22 | 2016-03-31 14:11:22
 3 |    11 | 2016-03-31 13:12:13

要从该表中按日期选择数据,我使用下一个查询:

SELECT date_format(date_sent, '%Y-%m-%d') as date_sent_push
     , SUM(count) as count_sent 
  FROM t2 
 GROUP 
    BY date_sent_push 
 ORDER 
    BY date_sent_push DESC 
 LIMIT 100;

它也很好用。 因此,我的目的是将这两个查询合并到一个SELECT中,接下来我可以在 php 中编写一个表,其中包含表t1中的Id计数和表t2中的count字段计数。

当我尝试下一个查询时:

SELECT date_format(t2.date_sent, '%Y-%m-%d') AS date_sent_push
     , SUM(t2.count) as count_sent
     , COUNT(t1.id) as count_click 
  FROM t2
     , t1 
 WHERE date_format(t2.date_sent, '%Y-%m-%d') = date_format(t1.date_click, '%Y-%m-%d') 
 GROUP 
    BY date_sent_push 
 ORDER 
    BY date_sent_push 
  DESC 
 LIMIT 100;

这行不通。 我做错了什么?

首先,您应该UNION这些结果,然后按天分组并选择聚合字段。 您也可以加入这些查询,但如果有两天在两个表之一中错过,则可能会出现问题:

SELECT date_sent_push, 
       MAX(count_click) as count_click,
       MAX(count_sent) as count_sent 
FROM
(SELECT date_format(date_click, '%Y-%m-%d') as date_sent_push
     , COUNT(id) as count_click
     , NULL as count_sent
  FROM t1 
  GROUP BY date_sent_push 
  UNION ALL
  SELECT date_format(date_sent, '%Y-%m-%d') as date_sent_push
     , NULL as count_click
     , SUM(count) as count_sent 
  FROM t2 
  GROUP 
    BY date_sent_push 
) as t3
GROUP BY date_sent_push

SQL小提琴演示

use this code

(SELECT date_format(date_sent, '%Y-%m-%d') as date_sent_push, SUM(count) as count_sent FROM t2 GROUP BY date_sent_push ORDER BY date_sent_push DESC LIMIT 100)
UNION
(SELECT date_format(t2.date_sent, '%Y-%m-%d') AS date_sent_push, SUM(t2.count) as count_sent, COUNT(t1.id) as count_click FROM t2, t1 WHERE date_format(t2.date_sent, '%Y-%m-%d')=date_format(t1.date_click, '%Y-%m-%d') GROUP BY date_sent_push ORDER BY date_sent_push DESC LIMIT 100)

我正在阅读这个我最感兴趣的主题,但我一定在某个地方犯了错误

我有 2 张桌子:

  1. hta 与冒号 ta1, ta2, ta3, dateb (这是行的日期时间)
  2. 带有colonn taille、poids、date_biometrie(行的日期时间)的生物特征

我尝试混合 2 个这样的表:在此处输入图像描述 实际上,一张桌子一切正常。 但是当我尝试与第二张桌子混合时没有工作。

需要帮助 谢谢

 <!-- Timelime example --> <div class="row"> <div class="col-md-12"> <!-- The time line --> </div> <div class="timeline"> <?php session_start(); $username = isset($_SESSION['username']) ? $_SESSION['username'] : NULL; try { $bdd = new PDO('mysql:host=localhost;dbname=***;charset=utf8', '***', '***'); } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } // Everything work with 1 table like this : // $reponsem3 = $bdd->query("SELECT ta1, ta2, ta3, DATE_FORMAT(dateb, '%d %b') AS nndate, DATE_FORMAT(dateb, '%H h %i') AS nnheure FROM hta WHERE username='$username' ORDER BY dateb DESC LIMIT 0,30"); // but when i try mix both, it doesn't work $reponsem3 = $bdd->query("SELECT nndate, n1, n2, n3 FROM (SELECT ta1 AS n1, ta2 AS n2, ta3 AS n3, DATE_FORMAT(dateb, '%d %b') AS nndate, DATE_FORMAT(dateb, '%H h %i') AS nnheure FROM hta WHERE username='$username' GROUP BY date UNION ALL SELECT poids AS n1, taille AS n2, DATE_FORMAT(date_biometrie, '%d %b') AS nndate FROM biometrie WHERE username='$username' GROUP BY date_biometrie) ORDER BY nndate"); $nndate = ''; while ($donneesm3 = $reponsem3->fetch()) { if ($nndate != $donneesm3['nndate']){ ?> <!-- timeline time label MOIS PAIRE--> <?php echo "<div class='time-label'> <span class='bg-secondary'>".$donneesm3['nndate']."</span> </div>"; } ?> <!-- /.timeline-label --> <!-- timeline item RESULTAT AMT--> <div> <i class="fas fa-tachometer-alt bg-blue"></i> <div class="timeline-item"> <span class="time"><i class="fas fa-clock"></i> <?php echo ($donneesm3['nnheure']); ?> </span> <h3 class="timeline-header"> <div class="row"> <div class="col-8" align="center"> <td> </td> / <td> <?php echo $donneesm3['n2']; ?></td> <td><?php echo ($donneesm3['n3']); ?></td> </div> <div class="col-4" align="rigth"> <a class="btn btn-tool"><i class="fas fa-pencil-alt"></i> </a> <a class="btn btn-tool"><i class="fas fa-trash-alt"></i> </a> </div> </div> <div class="col-4" align="rigth"> <a class="btn btn-tool"><i class="fas fa-pencil-alt"></i> </a> <a class="btn btn-tool"><i class="fas fa-trash-alt"></i> </a> </div> </div> </h3> </div> </div> <?php $nndate = $donneesm3['nndate']; } $reponsem3->closeCursor(); ?> </div>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM