Mysql 在表中选择最低日期
我有一个带有日期条件的查询:Mysql 在表中选择最低日期,mysql,sql,Mysql,Sql,我有一个带有日期条件的查询: SELECT MIN(date(a.changedttm)) as date, f.pcode, g.theme_name, h.ecode, c.take, c.plan_start, c.plan_end FROM sctrail a, working_scene b, working_episode c, working_project d, master_sce
SELECT
MIN(date(a.changedttm)) as date,
f.pcode,
g.theme_name,
h.ecode,
c.take,
c.plan_start,
c.plan_end
FROM
sctrail a,
working_scene b,
working_episode c,
working_project d,
master_scene e,
master_project f,
ref_themes g,
master_episode h,
ref_status j
WHERE
a.fkwsid = b.wsid
AND b.fkweid=c.weid
AND c.fkeid=h.eid
AND c.fkwpid=d.wpid
AND b.fksid = e.sid
AND d.fkpid = f.pid
AND d.fkrftid = g.rftid
AND b.status=j.rsid
AND date(a.changedttm) >= '$start_month'
AND date(a.changedttm) <= '$end_month'
AND a.appliedstatus != '0'
GROUP BY
f.pcode,
g.theme_name,
h.ecode,
c.take
ORDER BY
f.pcode,
g.theme_name,
h.ecode,
c.take;
它工作正常,除了一件事,MINdatea.changedttm是在给定的日期范围内选择的
因此,如果我从2019-10-01搜索到2019-10-31,它将只为该范围选择最低日期,但我希望找到整个时间的最低日期
是否有方法更改查询,从整个表中选择MINdatea.changedttm,但将日期范围保留在WHERE内?尝试将WHERE日期范围限制移动到第一次连接的条件下
创建一个sctrail表,并将第一个联接设为左联接。这将防止sctrail中的任何记录因该联接而被过滤掉
SELECT
MIN(DATE(a.changedttm)) AS date,
f.pcode,
g.theme_name,
h.ecode,
c.take,
c.plan_start,
c.plan_end
FROM sctrail a
LEFT JOIN working_scene b
ON a.fkwsid = b.wsid AND
DATE(a.changedttm) BETWEEN '$start_month' AND '$end_month'
INNER JOIN working_episode c
ON b.fkweid = c.weid
INNER JOIN working_project d
ON c.fkwpid = d.wpid
INNER JOIN master_scene e
ON b.fksid = e.sid
INNER JOIN master_project f
ON d.fkpid = f.pid
INNER JOIN ref_themes g
ON d.fkrftid = g.rftid
INNER JOIN master_episode h
ON c.fkeid = h.eid
INNER JOIN ref_status j
ON b.status = j.rsid
WHERE
a.appliedstatus != '0'
GROUP BY
f.pcode,
g.theme_name,
h.ecode,
c.take,
c.plan_start,
c.plan_end
ORDER BY
f.pcode,
g.theme_name,
h.ecode,
c.take;
我用现代显式连接取代了传统的隐式连接,这是现在编写SQL的首选方法,并且已经使用了25年多。另外,我在GROUPBY子句中增加了一些列,以使您的查询有效。这是您的查询,您可以添加包含mindate子查询的列
要做到这一点,您需要加入一个单独的select语句,以在相同的结果集中获得最低的日期值。类似于左连接选择1作为参考,MINdate作为MINdate FROM。。由于_mindateon _minDate.ref=main.ref如果WHERE子句限制在某个范围内,则唯一可用的最低日期是该范围的起点。一些示例数据在这里非常有用。请使用适当的连接。它已经存在超过25年了!我怀疑OP希望查询范围内的最小changedttm日期,但不包括WHERE范围限制。看看我们中谁是对的将是有趣的^^
SELECT
(SELECT MIN(date(changedttm)) FROM sctrail) as date,
f.pcode,
g.theme_name,
h.ecode,
c.take,
c.plan_start,
c.plan_end
FROM sctrail a,
INNER JOIN working_scene b ON a.fkwsid = b.wsid
INNER JOIN working_episode c ON b.fkweid = c.weid,
INNER JOIN working_project d ON c.fkeid = h.eid
INNER JOIN master_scene e ON c.fkwpid = d.wpid
INNER JOIN master_project f ON b.fksid = e.sid
INNER JOIN ref_themes g ON d.fkpid = f.pid
INNER JOIN master_episode h ON d.fkrftid = g.rftid
INNER JOIN ref_status j ON b.status = j.rsid
WHERE date(a.changedttm) >= '$start_month'
AND date(a.changedttm) <= '$end_month'
AND a.appliedstatus != '0'
ORDER BY f.pcode, g.theme_name, h.ecode, c.take;