我们有多个Invstatus值(1-10),只想排除一种状态类型(1),但只有该类型年龄大于x数的天数。因此,所有记录都将显示,但不能显示那些Invstatus = 1并且比X天大的记录。InvStatus = 1且比X天小的年龄将包括在记录集中。
我是否一般选择所有记录,然后在子查询过滤器中= 1年龄比x天大的记录?
以下查询不使用以尝试选择以排除的记录,但它不起作用,而且似乎也效率低下,因为要执行几秒钟。
SELECT
tblinventory.invId,
tblinventory.invTitle,
tblinventory.invStatus,
tblhouseinfo.Address,
tblhouseinfo.City,
tblhouseinfo.`State`,
tblhouseinfo.Zip,
tblhouseinfo.Update_date,
CURRENT_DATE() - INTERVAL 10 DAY AS dateEx
FROM
tblinventory
LEFT OUTER JOIN tblhouseinfo ON tblinventory.invId = tblhouseinfo.addInfoID
WHERE
invReleased = 0
AND invStatus NOT IN (SELECT invId from tblhouseinfo WHERE invStatus = 1
AND tblhouseinfo.Update_date < CURRENT_DATE() - INTERVAL 10 DAY )
ORDER BY
`tblhouseinfo`.`Update_date` DESC
我可以在页面级别上使用PHP过滤结果,但这似乎也不太效率,并且宁愿使用最佳实践执行此任务。
更新:总共有155行。所有tblhouseinfo.update_date(TIMESTAMP)值为" 2017-09-06 10:53:17"(8月9日)接受三个我更改为测试为" 2017-07-06 10:53:17"(7月6日)
利用以下建议:
AND NOT (invStatus = 1 AND tblhouseinfo.Update_date > CURRENT_DATE() - INTERVAL 10 DAY )
60条记录不包括预期3。
" 2017-08-28"是Current_date() - 间隔10天的当前结果,该结果应在10天范围内选择" 2017-09-06-06 10:53:17",仅排除这三个记录那就是" 2017-07-06 10:53:17"
最终工作解决方案/查询:
SELECT
tblinventory.invId,
tblinventory.invTitle,
tblinventory.invStatus,
tblhouseinfo.Address,
tblhouseinfo.City,
tblhouseinfo.`State`,
tblhouseinfo.Zip,
tblhouseinfo.Update_date,
CURRENT_DATE() - INTERVAL 10 DAY AS dateEx
FROM
tblinventory
LEFT OUTER JOIN tblhouseinfo ON tblinventory.invId = tblhouseinfo.addInfoID
WHERE
invReleased = 0
AND NOT (invStatus = 1 AND tblhouseinfo.Update_date < CURRENT_DATE() - INTERVAL 10 DAY )
ORDER BY
`tblhouseinfo`.`Update_date` DESC
SELECT
tblinventory.invId,
tblinventory.invTitle,
tblinventory.invStatus,
tblhouseinfo.Address,
tblhouseinfo.City,
tblhouseinfo.`State`,
tblhouseinfo.Zip,
tblhouseinfo.Update_date,
CURRENT_DATE() - INTERVAL 10 DAY AS dateEx
FROM
tblinventory
LEFT OUTER JOIN tblhouseinfo ON tblinventory.invId = tblhouseinfo.addInfoID
WHERE
invReleased = 0
AND NOT (invStatus = 1 AND tblhouseinfo.Update_date < CURRENT_DATE() - INTERVAL 10 DAY )
ORDER BY
`tblhouseinfo`.`Update_date` DESC
,如果您知道自己永远不需要ID#1(Invstatus 1),则不需要从其他表中选择Invid。但是您也可以在几天的时间内提出一个声明。
我总是使用时间戳(以UNIX为单位)记录数据输入/修改。
AND (timestamp >= beginTimestamp AND timeStamp <= endTimestamp)