我们有一个电话拨号器,可以给我们的商店打电话,告知他们所在地区的汽油价格。
我们有 3 个表(WBDAPP00、WBDCIE00、WBDCIA00)
WBDAPP00
是我们存储呼叫信息的地方。
DANOID
= ID
DA#INT
, DA#IND
, DA#TEL
= 电话号码
DA#ENV
= 群呼号码,我们向少数商店发送 1 条消息。
DASTAT
= 调用状态(Confirm by store,canceled,running,confirmed by us, in pause)
DADTHR
=最后状态修改的时间戳
WBDCIE00
是我们存储该组store信息的地方
CIE#EN
=ID
CIEDHC
=调用有效的时间戳,我们可以早上打电话告诉价格将在14h30改变
CIE$OR
=普通
CIE$PL
的价格=加
CIE$SP
的价格=超级的价格
CIE$DI
=柴油的价格
WBDCIA00
是关于的补充信息WBDAPP00
CIA#ST
=商店
CIA#AP
的ID=呼叫
CIE#EN
的ID=群呼的ID
CIABAN
=这是商店的公司编号
这是这 3 个表的示例输出
SELECT * FROM PRDCM/WBDAPP00 WHERE DA#ENV = 17258 OR DA#ENV = 17257
+--------+--------+--------+---------+--------+--- -----+----------------+-----------+--- -----+ | 达诺德 | DA#INT | DA#IND | 数据#电话 | DA#ENV | 数据统计 | 爸爸 | 减震器 | 达穆斯 | +--------+--------+--------+---------+--------+--- -----+----------------+-----------+--- -----+ | 100420 | 1 | 418 | 9600055 | 17257 | 4 | 2012-05-07-09.15.04.768228 |1;2;1;1;1;1| 伊萨拉普 | | 100421 | 1 | 819 | 7346491 | 17258 | 0 | 2012-05-07-09.23.32.362971 |0;4;0;1;0;0| 伊萨拉普 | | 100422 | 1 | 819 | 7624747 | 17258 | 1 | 2012-05-07-09.24.28.042330 |0;3;1;1;0;1| 伊萨拉普 | | 100423 | 1 | 819 | 6377874 | 17258 | 0 | 2012-05-07-09.23.32.803073 |0;3;0;1;0;1| 伊萨拉普 | | 100424 | 1 | 819 | 8742844 | 17258 | 1 | 2012-05-07-09.24.25.347116 |1;1;1;1;0;1| 伊萨拉普 | | 100425 | 1 | 819 | 8255744 | 17258 | 0 | 2012-05-07-09.23.33.207688 |1;3;1;1;0;1| 伊萨拉普 | +--------+--------+--------+---------+--------+--- -----+----------------+-----------+--- -----+
SELECT * FROM PRDCM/WBDCIE00 WHERE CIE#EN = 17258 OR CIE#EN = 17257
+--------+----------------+--------+-- ------+--------+--------+ | CIE#EN | CIEDHC | CIE$ 或 | CIE$PL | CIE$SP | CIE$DI | +--------+----------------+--------+-- ------+--------+--------+ | 17257 | 2012-05-04-17.00.00.000000 | 0 | 0 | 0 | 1,359 | | 17258 | 2012-05-07-09.30.00.000000 | 1,354 | 0 | 0 | 0 | +--------+----------------+--------+-- ------+--------+--------+
SELECT * FROM PRDCM/WBDCIA00 WHERE CIA#EN = 17258 OR CIA#EN = 17257
+--------+--------+--------+--------+ | 中央情报局#ST | 中央情报局#AP | 中央情报局#EN | 夏班 | +--------+--------+--------+--------+ | 96 | 100420 | 17257 | 2 | | 316 | 100421 | 17258 | 4 | | 320 | 100422 | 17258 | 3 | | 321 | 100423 | 17258 | 3 | | 338 | 100424 | 17258 | 1 | | 366 | 100425 | 17258 | 3 | +--------+--------+--------+--------+
这是表之间的关系
CIA#AP
= DANOID
CIA#EN
= CIE#EN
=DA#ENV
我想为每个提取最后一个CIE$OR
(不是 0)和最后一个CIE$DI
(不是 0)CIA#ST
。
最后一个由CIEDHC
(Desc order)确定。
DASTAT
必须是 1 或 4。
这是我想从上面的数据中提取的一个例子:
+--------+--------+--------+ | 中央情报局#ST | CIE$ 或 | CIE$DI | +--------+--------+--------+ | 96 | 0 | 1,359 | | 316 | 1,354 | 0 | | 320 | 1,354 | 0 | | 321 | 1,354 | 0 | | 338 | 1,354 | 0 | | 366 | 1,354 | 0 | +--------+--------+--------+
或者像这个,这并不理想,但在这种情况下我会容忍它
+--------+-------------+--------+ | 中央情报局#ST | 产品类型 | 价格 | +--------+-------------+--------+ | 96 | 3 | 1,359 | | 316 | 6 | 1,354 | | 320 | 6 | 1,354 | | 321 | 6 | 1,354 | | 338 | 6 | 1,354 | | 366 | 6 | 1,354 | +--------+-------------+--------+
对于那些不了解 AS400 的人,FETCH FIRST 1 ROWS ONLY
等于TOP 1
ANDLIMIT 1
LAST
在 AS400 中不存在,所以我需要替换
SELECT LAST(Column1) AS test FROM table1
为
SELECT Column1,Column2 FROM table1 ORDER BY Column2 DESC LIMIT 1
我尝试过使用 subselect 但你不能使用ORDER BY
and FETCH FIRST 1 ROWS ONLY
。
我们在没有任何 PTF 的 V5R1 中。
这是一个提取的例子
SELECT CIA#ST,CIE$OR,CIE$DI,CIEDHC
FROM PRDCM/WBDAPP03
INNER JOIN PRDCM/WBDCIE01 ON CIE#EN = DA#ENV
INNER JOIN PRDCM/WBDCIA01 ON CIA#AP = DANOID
WHERE DASTAT IN (1,4)
ORDER BY CIEDHC,DA#ENV
FETCH FIRST 5 ROWS ONLY
+--------+--------+--------+---------- ------+ | 中央情报局#ST | CIE$ 或 | CIE$DI | CIEDHC | +--------+--------+--------+---------- ------+ | 88 | 1,014 | 1,039 | 2010-08-25-09.00.00.000000 | | 89 | 1,014 | 1,039 | 2010-08-25-09.00.00.000000 | | 90 | 1,014 | 1,039 | 2010-08-25-09.00.00.000000 | | 91 | 1,014 | 1,039 | 2010-08-25-09.00.00.000000 | | 119 | 1,084 | 0 | 2010-08-25-09.00.00.000000 | | 第522章 1,014 | 1,039 | 2010-08-25-09.00.00.000000 | +--------+--------+--------+---------- ------+
我会尝试你所有的建议。