SQL范围条件小于、大于和之间
Posted
技术标签:
【中文标题】SQL范围条件小于、大于和之间【英文标题】:SQL range conditions less than, greater than and between 【发布时间】:2017-06-08 19:29:25 【问题描述】:我想要完成的是;查询“documents created column”字段中的“email ocr in”和“universal production”行是否与“email OCR”“documents_created”的金额相同。如果没有,请拉出该批次。最后,如果在提取电子邮件 ocr 和通用生产文件后,附件计数少于 7 个条目,则返回所述结果
当前查询如下:
use N
SELECT id,
type,
NAME,
log_time ,
start_time ,
documents_created ,
pages_created,
processed,
processed_time
FROM N_LF_OCR_LOG
WHERE
-- Log time is current day
log_time between CONVERT(date, getdate()) AND CONVERT(datetime,floor(CONVERT(float,getdate()))) + '23:59:00'
-- Documents created is NULL or non zero
AND (documents_created IS NULL OR documents_created <> 0)
or ( documents_created is null and log_time between CONVERT(date, getdate()) AND CONVERT(datetime,floor(CONVERT(float,getdate()))) + '23:59:00')
-- Filter for specific types
AND type IN ('Email OCR In',
'Universal Production')
-- Filter to rows where number of pages and documents created are not equal
AND documents_created <2 and pages_created >2
ORDER BY log_time
,id asc
,processed_time asc
知道如何合并它吗?我是新手。谢谢
【问题讨论】:
【参考方案1】:创建索引时,您只需指定要索引的列。为范围查询或完全匹配创建索引没有区别。您可以将多个列添加到同一个索引,以便所有列都可以从索引中受益,因为当时每个表只能选择一个索引来支持查询。
您可以创建一个仅覆盖您的 where
-clause 的索引:
alter table N_LF_OCR_LOG add index test1(log_time, documents_created, type, pages_created);
或者也将排序所需的列添加到索引中。索引中列的顺序很重要,并且必须与查询中的顺序相同:
alter table N_LF_OCR_LOG add index test1(log_time, id, processed_time, documents_created, type, pages_created);
或者添加一个包含返回列的覆盖索引,这样您就不必从表中加载任何值,并且只需使用索引即可完成查询。这为查询提供了最佳响应时间。但是索引占用了更多的磁盘空间。
alter table N_LF_OCR_LOG add index test1(log_time, id, processed_time, documents_created, type, pages_created, NAME, start_time, processed);
在查询前使用 explain
关键字来查看索引的性能。
【讨论】:
谢谢!我尝试将它添加到我的 where 子句中,但它有一个错误。你能把它列在代码中吗? 不要将其添加到您现有的查询中。这些是分开的陈述。在执行查询之前,您必须执行一次。每次您在表中自动插入新行时,索引都会永久保留并更新。也许您应该阅读有关添加索引的基础知识以更好地理解:dev.mysql.com/doc/refman/5.7/en/create-index.html以上是关于SQL范围条件小于、大于和之间的主要内容,如果未能解决你的问题,请参考以下文章