sqlite查询最早的日期

麦克风

我有以下查询:

  SELECT (CASE WHEN cc.id IS NULL THEN dc.id ELSE cc.id END) AS id,
 l.CALL,l.QSO_DATE,cc.prefix,l.state,l.QSL_RCVD,l.Band,l.Mode,
(CASE  WHEN CC.Country IS NULL THEN dc.Country ELSE cc.Country END) AS country,
(CASE  WHEN CC.Country IS NULL THEN 'Y' ELSE 'N' END) AS 'deleted',
(CASE  WHEN CC.flags IS NULL THEN dc.flags ELSE cc.flags END) AS 'flag'
FROM lotw l
LEFT OUTER JOIN CountryCode AS cc on cc.code = l.dxcc 
LEFT OUTER JOIN DeleteCountry AS dc on dc.code = l.dxcc 
WHERE l.DXCC > '' 

GROUP BY CC.Country,dc.Country  ORDER BY cc.COUNTRY,dc.COUNTRY.

它返回一组与国家/地区代码表代码字段匹配的唯一国家/地区。速度还不到一秒。

我需要扩展它,以便查询从LOTW表中选择最早的QSLRDATE。所以我像这样修改查询:

SELECT (CASE WHEN cc.id IS NULL THEN dc.id ELSE cc.id END) AS id, l.CALL,l.QSO_DATE,cc.prefix,l.state,l.QSL_RCVD,l.Band,l.Mode,
(CASE  WHEN CC.Country IS NULL THEN dc.Country ELSE cc.Country END) AS country,
(CASE  WHEN CC.Country IS NULL THEN 'Y' ELSE 'N' END) AS 'deleted',
(CASE  WHEN CC.flags IS NULL THEN dc.flags ELSE cc.flags END) AS 'flag'
FROM lotw l
LEFT OUTER JOIN CountryCode AS cc on cc.code = l.dxcc 
LEFT OUTER JOIN DeleteCountry AS dc on dc.code = l.dxcc 
WHERE l.QSLRDATE = (SELECT MIN(l2.QSLRDATE) FROM LOTW l2 WHERE l2.DXCC=l.DXCC) AND l.DXCC > '' 

GROUP BY CC.Country,dc.Country  ORDER BY cc.COUNTRY,dc.COUNTRY

这行得通,但性能从不到一秒缩短到了15秒。我添加的子查询:

l.QSLRDATE = (SELECT MIN(l2.QSLRDATE) FROM LOTW l2 WHERE l2.DXCC=l.DXCC)

不可能是实现我想要的最好的方法。任何帮助都会很棒。

MatBailie

尝试加入子查询,而不是在WHERE子句中使用相关子查询。

SELECT
  (CASE WHEN cc.id IS NULL THEN dc.id ELSE cc.id END) AS id,
  l.CALL,l.QSO_DATE,cc.prefix,l.state,l.QSL_RCVD,l.Band,l.Mode,
  (CASE  WHEN CC.Country IS NULL THEN dc.Country ELSE cc.Country END) AS country,
  (CASE  WHEN CC.Country IS NULL THEN 'Y' ELSE 'N' END) AS 'deleted',
  (CASE  WHEN CC.flags IS NULL THEN dc.flags ELSE cc.flags END) AS 'flag'
FROM
  (SELECT dxcc, MIN(qslrdate) AS qslrdate FROM lotw GROUP BY dxcc) AS qslr
     INNER JOIN lotw AS l ON l.dxcc = qslr.dxcc AND l.qslrdate = qslr.qslrdate
LEFT OUTER JOIN CountryCode AS cc on cc.code = l.dxcc 
LEFT OUTER JOIN DeleteCountry AS dc on dc.code = l.dxcc 
WHERE l.DXCC > ''
GROUP BY CC.Country,dc.Country  ORDER BY cc.COUNTRY,dc.COUNTRY

另外,请确保lotw已启用索引,(dxcc, qslrdate)以确保子查询和联接均运行良好。

实际上,请确保首先拥有该索引,然后重试查询。然后,如果性能仍然很差,请尝试上面的查询。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

仅查询最早日期的数值

来自分类Dev

Access 365:在查询中找到最早的日期

来自分类Dev

根据最早日期对查询子集过滤查询结果

来自分类Dev

查找最新或最早的日期

来自分类Dev

确定最早发货日期与当前库存水平的 SQL Server 查询

来自分类Dev

从数组中查找最早的日期

来自分类Dev

仅获得日期最早的结果

来自分类Dev

删除日期最早的重复行

来自分类Dev

SQlite查询DateTime中的不同日期

来自分类Dev

在 SQLite 中查询日期的月份部分

来自分类Dev

如何在SQLite表中插入日期和查询日期

来自分类Dev

R中每个ID的最早日期

来自分类Dev

使用linq / lambda选择最早的日期

来自分类Dev

PHP:从数组中解析最早的日期

来自分类Dev

Oracle:最早的入住日期(两列)

来自分类Dev

ID和代码组合的最早日期

来自分类Dev

Oracle-仅返回最早或现在的日期

来自分类Dev

r中最早的日期和ID的条件

来自分类Dev

分组时+新列+最早的日期分组

来自分类Dev

从最早到最新的SQL排列日期

来自分类Dev

返回范围中的最早日期

来自分类Dev

Python-如何从QuerySet获取最早的日期?

来自分类Dev

使用最早的日期时间处理多列

来自分类Dev

ID和代码组合的最早日期

来自分类Dev

如何根据当前的sg选择最早的日期

来自分类Dev

查找最新日期但最早时间

来自分类Dev

如何在 PostgreSQL 中找到最早的日期?

来自分类Dev

比较连续记录并获取最早开始日期

来自分类Dev

如何获得lastmodifier的最早日期?