【问题标题】:How to select the first and last values for a date in SQL?如何在 SQL 中选择日期的第一个和最后一个值?
【发布时间】:2017-05-19 04:12:01
【问题描述】:

我有以下疑问:

$sql  = "SELECT C_Date, C_Time, C_Unique FROM tEnter";
$sql .= " WHERE C_Date >= '" . $_GET['date'] . "'";

按照C_Time升序排列。

假设对于某个特定日期,我在 8:30、9:30、10:30 和 11:30 有四个结果。如何更改上述查询以在我的结果中仅获得 8:30 和 11:30?

附:会有多个日期,每个日期会有一次或多次。

【问题讨论】:

  • 您的代码容易受到 SQL 注入的影响,您需要解决这个问题。
  • @Enstage 有什么建议吗?
  • @MiniGunnR 看看我的回答。希望这对你有用。

标签: php mysql sql postgresql


【解决方案1】:

首先,您应该更改查询以避免 SQL 注入。查看prepareexecute 语句。

我猜如果结果按时间排序,您可以像这样获得第一个和最后一个值:

$first = reset($array);//to get the first value
$last = end($array);//to get the last one

【讨论】:

    【解决方案2】:

    使用 mysql min()ma​​x() 选择第一个和最后一个日期

    SELECT C_Date, MIN(C_Time) as start_time,MAX(C_Time) as end_time, C_Unique FROM tEnter WHERE DATE(C_Date) = **'DYNAMIC DATE'**
    

    注意:- 根据您的逻辑更改“动态日期”。

    希望它对你有用。

    【讨论】:

      【解决方案3】:

      你必须自己加入才能找到MAXMIN日期

       $sql  = " SELECT t.C_Date, t.C_Time, t.C_Unique FROM tEnter as t ";
       $sql .= " JOIN (SELECT  MAX(C_Time) as formax, MIN(C_Time) as formin FROM tEnter where C_Date >= '" . $_GET['date'] . "') as tmp ON t.C_Time= tmp.formin OR t.C_Time= tmp.formax ";
       $sql .= " WHERE t.C_Date >= '" . $_GET['date'] . "'";
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-12-14
        • 1970-01-01
        • 1970-01-01
        • 2012-12-07
        • 1970-01-01
        • 2014-04-10
        • 1970-01-01
        相关资源
        最近更新 更多