我正在尝试按照“Retrieving the last record in each group”中给出的答案,但我遇到了问题
我的问题是,当我只想回显计数3时,我正在回显Y78430(即计数1和3)
我正在尝试选择数据组的最后一条记录,其中最后一条记录是字母小写字母。
此处的数据示例(表格为'schedulelocation'): -
Count cif_train_uid cif_stp_indicator Other Data
1 Y78430 p zzzzzzz
2 Z45012 p fffffff
3 Y78430 o sssssss
在上述数据中有2 X Y78430。我想只回应其中一个。 cif_stp_indicator为 o 的那个 - 即字母表中的字母低于“ p ”
这是我的代码: -
$b="SELECT s1.cif_train_uid,s1.cif_stp_indicator,s1.schedule_start_date
FROM schedulelocation s1
LEFT JOIN schedulelocation s2
ON (s1.cif_train_uid AND s1.cif_stp_indicator < s2.cif_stp_indicator)
WHERE s2.cif_stp_indicator is Null AND s1.cif_train_uid='Y78430' ";
$l=mysqli_query($mysql_link,$b);
if ($l) {
while($berths=mysqli_fetch_array($l,MYSQLI_ASSOC))
{
echo $berths['cif_train_uid'];
echo $berths['cif_stp_indicator'];
echo $berths['schedule_start_date'];
echo "</b>";
echo "</b>";
}
}
任何帮助非常感谢。谢谢
答案 0 :(得分:1)
您需要使用聚合查询来查找要显示的相应行,并将其与您的基本信息相关联。
您的汇总查询是:
SELECT cif_train_uid,
MIN(cif_stp_indicator) as cif_stp_indicator
FROM schedulelocation
GROUP BY cif_train_uid
它返回一对(列车,指示器)对的列表,其中指示器是列车的最低值(词法首先)。
然后你INNER将它加入你的查询的其余部分。
SELECT s1.cif_train_uid,s1.cif_stp_indicator,s1.schedule_start_date
FROM ( SELECT cif_train_uid, MIN(cif_stp_indicator) as cif_stp_indicator
FROM schedulelocation
GROUP BY cif_train_uid
) AS m
INNER JOIN schedulelocation s1
ON m.cif_train_uid=s1.cif_train_uid
AND m.cif_stp_indicator = s1.cif_stp_indicator
LEFT JOIN schedulelocation s2
ON s1.cif_train_uid
AND s1.cif_stp_indicator < s2.cif_stp_indicator)
WHERE s2.cif_stp_indicator is Null /* IS THIS CORRECT ?? */
AND s1.cif_train_uid='Y78430'
注意我不能100%确定您的自我加入操作会发生什么。我认为你的第一个WHERE
子句消除了自连接实际发现的所有行。我不明白。