[英]SQL to get DISTINCT date values from a table
我在一個名為startdate的表中有一個字段,我想要做的是盡可能少地運行查詢以獲得一個顯示如下的列表:
2012
January
March
October
2011
September
November
我想要每年展示的唯一日期是有記錄的日期。
任何幫助或指針贊賞。
謝謝
此查詢可用於查找給定日期(此處為開始日期)的表中所有不同的年/月組合。
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>';
}
使用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>';
}
}
select distinct column1, column2, column3... from table where columnx <> "" order by year, month
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上訂購(除非您想要按字母順序排列)
正如其他帖子給出了答案,我將提供有關這些答案為何有效的信息。
在SQL select語句中,您可以提供關鍵字。 特別是對於MySQL,您可以提供ALL, DISTINCT, DISTINCTROW
(以及與不同行無關的其他內容)。
后兩個選項實際上是相同的選項,並產生相同的結果。 沒有關鍵字的默認select語句使用ALL
返回所有結果。 通過傳入DISTINCT
您可以消除任何重復的條目。
重復條目是所有字段都相同的條目。但是,應該注意的是,如果您有一個自動遞增的主鍵,則每行與最后一行不同,因為pk是不同的。 為了使用這種設置選擇不同的值,您需要指定一個真正不同的單獨列名。
有關MySQL SELECT語句的更多閱讀,請參閱用戶指南的選擇部分 。
希望我沒有提供您已經從提供的答案中收集的信息,但我總是發現理解“為什么”和“如何”經常讓我理解特定解決方案何時起作用,以及什么時候不起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.