SQL从表中获取DISTINCT日期值

时间:2012-11-19 13:33:34

标签: php mysql sql

我在一个名为startdate的表中有一个字段,我想要做的是尽可能少地运行查询以获得一个显示如下的列表:

2012

January
March
October

2011

September
November

我想要每年展示的唯一日期是有记录的日期。

任何帮助或指示赞赏。

由于

5 个答案:

答案 0 :(得分:2)

此查询可用于查找给定日期(此处为开始日期)的表格中所有不同的年/月组合。

SELECT     YEAR(startdate) AS DYear, MONTH(startdate) AS DMonth 
FROM         tablename
GROUP BY YEAR(startdate), MONTH(startdate) 

在您以任何方式取回结果后,您可以执行以下操作:

$year = 0;
  while ($row) { //loop through your rows here using while or foreach
    if($year != $row['DYear']){
      echo '<h1>'.$row['DYear'].'</h1>';
      $year = $row['DYear'];
    }
    echo '<ul>';
    echo '<li>'.$row['DMonth'].'</li>';
    echo '</ul>';
  }

答案 1 :(得分:0)

使用PDO,您可以执行以下操作:

$dbh = new PDO("mysql:dbname=$dbname", $username, $password);

$qry = $dbh->query('
  SELECT DISTINCT
    YEAR(startdate)      AS year,
    MONTHNAME(startdate) AS month
  FROM
    my_table
  ORDER BY
    startdate
');

if ($qry) {    
  $row = $qry->fetch();
  while ($row) {
    $current_year = $row['year'];
    echo '<h1>',htmlentities($current_year),'</h1><ul>';
    do {
      echo '<li>',htmlentities($row['month']),'</li>';
    } while ($row = $qry->fetch() and $row['year'] == $current_year);
    echo '</ul>';
  }
}

答案 2 :(得分:0)

select distinct column1, column2, column3... from table where columnx <> "" order by year, month

答案 3 :(得分:0)

SELECT DISTINCT YEAR(startdate), MONTHNAME(startdate)
FROM   mytable
ORDER BY YEAR(startdate) desc,  MONTH(startdate) asc;

应该做的伎俩,但输出将是:

2012 January
2012 March
2012 October
2011 September
2011 November

您可以使用eggyal提供的代码将其转换为您正在寻找的格式。请注意,您需要在MONTH而不是MONTHNAME上订购(除非您需要按字母顺序排列)

答案 4 :(得分:0)

正如其他帖子给出了答案,我将提供为什么这些答案有效的信息。

在SQL select语句中,您可以提供关键字。特别是对于MySQL,您可以提供ALL, DISTINCT, DISTINCTROW(以及与不同行无关的其他内容)。

后两个选项实际上是相同的选项并产生相同的结果。没有关键字的默认select语句使用ALL返回所有结果。通过传递DISTINCT,您可以消除任何重复的条目。

重复条目是所有字段都相同的条目。但是,应该注意的是,如果您有一个自动递增的主键,则每行与最后一行不同,因为pk是不同的。为了使用这种设置选择不同的值,您需要指定一个真正不同的单独列名。

有关MySQL SELECT语句的更多阅读,请参阅users guide's select section

希望我没有提供您已经从提供的答案中收集的信息,但我总是发现理解“为什么”和“如何”经常让我理解特定解决方案何时起作用,以及何时赢得不行。