Sql查询(带Desc order和Limit)不能在python上运行(OpenERP)

2024-05-19 22:11:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我一整天都在和这个问题做斗争,并且尝试了所有可能的方法知道。这里问题是:

我正在处理的字段的格式如下:

XXX年示例:001-2014(字符串)

假设我们有这些记录:

  • 001-2014年
  • 2011-2014年
  • 2013年3月

我希望得到的结果是011-2014(换句话说,最早的、价值最大的年份)

我写了一个在PostgreSql上运行良好的查询:

select split_part(numero_bl, '-', 1) as part1, 
       split_part(numero_bl, '-', 2) as part2 
       from livraisons 
ORDER BY part2 desc,part1 desc limit 1

split_part函数将列“numero\u bl”拆分为2零件.so结果是这样的:

第1部分|第2部分

2014年1月

当我尝试在Python代码中引入它时,它使用升序返回正确的值,但是当它是降序时,返回('None',)

下面是python中我的函数的一个简单版本:

^{pr2}$

当然,当我不放“else子句”时,它会返回('None',)

请问有没有办法解决这个问题?在

谢谢你


Tags: 方法函数字符串none示例as格式desc
2条回答

该列中有空值。当您要求降序时,空值将首先出现:

select *
from (values (1), (null)) s(a)
order by a desc;
 a 
 -

 1
(2 rows)

如果你想保留空值,那么告诉它最后一个命令是空的

^{pr2}$

或者过滤掉空值

select *
from (values (1), (null)) s(a)
where a is not null
order by a desc;
 a 
 -
 1
(1 row)

我找到了解决问题的办法。 我把我的问题改成了这个

cr.execute("""select max(numero_bl) as part from livraisons 
           where split_part(numero_bl, '-', 2) >= %s""",
        ((datetime.datetime.strftime(datetime.datetime.now(), '%Y')),))

首先,我只保存年份部分大于当前年份的记录,之后我取字段“numero”的最大值

如果有人感兴趣,以下是完整的代码:

^{pr2}$

谢谢你们的回复

相关问题 更多 >