我有一份报告看起来是这样的:
| 编号顺序|时间戳记|标识符|状态|
| - -|- -|- -|- -|
| 十二个|2021-06-23-14.00.00.232425|十一|已完成|
| 十三个|2021-06-30-18.00.00.224525|二十二个|已完成|
| 十四|2021-07-01-01.00.00.224525|二十三个|已完成|
这是通过SQL完成的:
SELECT numberOrder, timestamp, id, status
from order
where status = 'done'
我希望报表只显示最旧的行:
| 编号顺序|时间戳记|标识符|状态|
| - -|- -|- -|- -|
| 十二个|2021-06-23-14.00.00.232425|十一|已完成|
SELECT numberOrder, timestamp, id, status
from order
WHERE timestamp = (select TOP 1 timestamp FROM order by timestamp)
and status = 'done'`
有什么想法吗?我试着使用min()。任何帮助都是感激的,有什么想法,如果我没有找到任何状态完成,然后找到状态取消?
如果我们找不到任何完成状态,我希望报告只显示取消行:
| 编号顺序|时间戳记|标识符|状态|
| - -|- -|- -|- -|
| 十二个|2021-06-23-14.00.00.232425|十一|取消了|
2条答案
按热度按时间l3zydbqr1#
诚然,我不熟悉DB2,但我建议使用下面的代码来按时间戳对行进行排序,并获取第一行(最早的)。
bbuxkriu2#
请尝试以下查询。
如果删除了组注解/* */,则可以按原样运行该语句。
不带该组注解的语句只对基本“表”MYTAB中状态为
cancel
的行有效。您可以在VALUES中用“cancel”注解掉该行,用“done”取消注解该行,以获取基本“表”中状态为done
的所有行。或者用原始表的任何内容构造基本“表”。您不必编辑查询即可获得两个结果。
其思想是枚举两种状态类型中的行row。所有状态中的第一行(按时间戳排序)的顺序是
done
行在cancel
行之前。最后,我们只得到第一行。