如何解决获取最新的日期行值
| select s.s_nric as NRIC,s.s_name as NAME,status.st_status,DATE_FORMAT(status.st_fromdate,\'%d-%m-%Y\') as from_date,DATE_FORMAT(status.ST_ON,\'%d-%m-%Y\') as ST_ON
FROM si_student_data AS s
LEFT JOIN si_student_status As st
ON st.st_nric=s.s_nric
INNER JOIN
( SELECT t.st_nric,t.st_fromdate,t.st_status,MAX(t.st_todate) as ST_ON
FROM si_student_status t
GROUP BY t.st_nric
) AS status
ON ( s.s_nric=status.st_nric
AND status.ST_ON=st.st_todate )
LEFT JOIN si_student_changes as s1
ON s1.ch_nric = s.s_nric
where 1=1
AND s1.ch_class=\'2S1\'
AND s1.ch_year=\'2011\'
GROUP BY s.s_nric
ORDER BY s1.ch_class,s.s_gender,s.s_name asc
当我使用此查询时,可以获得带有相应nric编号的最大日期值。但是我无法获得与日期相关的其他值。它仅选择具有不同行值的最大日期。我想要相关的值(状态)到日期
我的样本表:
第一张表:si_student_data
s_nric s_name
1 Suba
2 Felix
3 welcome
第二个表格:si_student_changes
ch_nric ch_year ch_class
1 2011 2S1
2 2011 2S1
3 2011 2S1
4 2010 1A1
5 2011 2T3
1 2010 1A1
第三张表:si_student_status
st_nric st_status st_fromdate st_todate
1 Active 10-10-2011 10-11-2011
1 Inactive 11-11-2011 12-12-2011
1 PRO 13-12-2011 22-12-2011
2 LWR 10-10-2011 10-11-2011
2 Inactive 11-11-2011 12-12-2011
2 ATTR 13-12-2011 20-12-2011
3 Active 04-01-2011 10-05-2011
3不活动2011年11月5日2011年12月8日
3 PRO 13-08-2011 20-10-2011
我的预期输出
s_nric s_name st_status st_fromdate st_todate
1 Suba PRO 13-12-2011 22-12-2011
2 Felix ATTR 13-12-2011 20-12-2011
3 welcome PRO 13-08-2011 20-10-2011
请说明如何获取最大日期值记录。我想要最大日期和相同的行值。
解决方法
只需从表
st
中添加所需的字段。并且不要在SELECT列表中使用status.*
:
select s.s_nric as NRIC,s.s_name as NAME,st.st_status,DATE_FORMAT(st.st_fromdate,\'%d-%m-%Y\') as from_date,DATE_FORMAT(st.st_todate,\'%d-%m-%Y\') as ST_ON
因此,整个查询可以写成:
SELECT s.s_nric AS NRIC,s.s_name AS NAME,\'%d-%m-%Y\') AS from_date,\'%d-%m-%Y\') AS ST_ON
FROM si_student_data AS s
LEFT JOIN si_student_status AS st
ON st.st_nric = s.s_nric
INNER JOIN
( SELECT t.st_nric,MAX(t.st_todate) AS ST_ON
FROM si_student_status t
GROUP BY t.st_nric
) AS status
ON ( s.s_nric = status.st_nric
AND status.ST_ON = st.st_todate )
LEFT JOIN si_student_changes as s1
ON s1.ch_nric = s.s_nric
WHERE 1=1
AND s1.ch_class=\'2S1\'
AND s1.ch_year=\'2011\'
GROUP BY s.s_nric
ORDER BY s1.ch_class,s.s_gender,s.s_name asc
, SELECT s.*,p.name,FROM `status` as s
left join profile as p ( s.id = p.id)
WHERE s.date= ( select MAX(s.date) from status)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。