p*****n 发帖数: 387 | 1 input.txt --》output.txt
我的理解是
把input.txt 第一行数据for1-3 列transpose,然后与第二行数据join
output.txt 最后insert 一列time key
不知道对否?
用sql程序怎么实现?
我sql太弱,一直没有搞定程序。恳请高手指点code。
多谢!
input.txt
ID for1 for2 for3
10 20.1 20.2 20.3
20 20.4 20.5 20.6
output.txt
ID forecast Time Key
10 20.1 1
10 20.2 2
10 20.3 3
20 20.4 1
20 20.5 2
20 20.6 3 |
p*****n 发帖数: 387 | 2 up up!
恳请高手指点!
【在 p*****n 的大作中提到】 : input.txt --》output.txt : 我的理解是 : 把input.txt 第一行数据for1-3 列transpose,然后与第二行数据join : output.txt 最后insert 一列time key : 不知道对否? : 用sql程序怎么实现? : 我sql太弱,一直没有搞定程序。恳请高手指点code。 : 多谢! : :
|
s********e 发帖数: 893 | 3 加的那个Time key是按照for1 ,for2,for3数值大小排序吗? |
w****w 发帖数: 521 | 4 select ID,for1 as forecast, now() as timekey
from input
union
select ID,for2 as forecast, now() as timekey
from input
union
select ID,for3 as forecast, now() as timekey
from input
再order一下。 |
s********e 发帖数: 893 | 5 不是高手,下面这个在Oracle下是可以的。供参考。
select id, forecast, rank() over
(partition by id order by forecast) timekey
from
(
select id, for1 forecast
from input
union select id, for2
from input
union select id, for3
from input
); |
s********e 发帖数: 893 | 6 如果你原始数据中允许同一个ID的for1,for2,for3有可能有相同的value,比如有两
个 10 20.1,你还想1,2,3排的话,就把rank换成row_number |
B*****g 发帖数: 34098 | 7 有包子耶,酷毙的准大师为啥还没出现?
【在 p*****n 的大作中提到】 : input.txt --》output.txt : 我的理解是 : 把input.txt 第一行数据for1-3 列transpose,然后与第二行数据join : output.txt 最后insert 一列time key : 不知道对否? : 用sql程序怎么实现? : 我sql太弱,一直没有搞定程序。恳请高手指点code。 : 多谢! : :
|
y****w 发帖数: 3747 | 8 输入输出都是文本,干嘛折腾db?给你个我手头的unpivot shell版
#!/usr/bin/ksh
#echo "only processing file with below format:"
#echo "root v1,v2,v3,v4...."
#echo "root v1 v2 v3 v4...."
#echo '----------------------------------'
infile=$1
[[ ! -f $infile ]] && echo "not a file!" && return -1
tmpf=$(mktemp)
cat $infile |sed '/^$/d' | while read rt val
do
echo "$val" | sed 's/ /\
/g' | sed 's/,/\
/g' > $tmpf
cat $tmpf | sort -n | xargs -i echo "$rt {}"
rm -f $tmpf
done
【在 p*****n 的大作中提到】 : input.txt --》output.txt : 我的理解是 : 把input.txt 第一行数据for1-3 列transpose,然后与第二行数据join : output.txt 最后insert 一列time key : 不知道对否? : 用sql程序怎么实现? : 我sql太弱,一直没有搞定程序。恳请高手指点code。 : 多谢! : :
|
p*****n 发帖数: 387 | 9 多谢大牛们出谋划策~~
受益匪浅!
包子马上转账。
第一次弄包子,希望能顺利搞定~~ |
p*****n 发帖数: 387 | 10 多谢!
很受启发!
我的SQL实在太烂了。得多向你学习~~
【在 s********e 的大作中提到】 : 不是高手,下面这个在Oracle下是可以的。供参考。 : select id, forecast, rank() over : (partition by id order by forecast) timekey : from : ( : select id, for1 forecast : from input : union select id, for2 : from input : union select id, for3
|
|
|
p*****n 发帖数: 387 | 11 多谢!
shell版本更容易跨平台实现!3x!
【在 y****w 的大作中提到】 : 输入输出都是文本,干嘛折腾db?给你个我手头的unpivot shell版 : #!/usr/bin/ksh : #echo "only processing file with below format:" : #echo "root v1,v2,v3,v4...." : #echo "root v1 v2 v3 v4...." : #echo '----------------------------------' : infile=$1 : [[ ! -f $infile ]] && echo "not a file!" && return -1 : tmpf=$(mktemp) : cat $infile |sed '/^$/d' | while read rt val
|
s**********o 发帖数: 14359 | |
B*****g 发帖数: 34098 | 13 UNPIVOT
【在 s**********o 的大作中提到】 : 不就是RANK一下然后PIVOT吗?
|
c*****d 发帖数: 6045 | |
c*****d 发帖数: 6045 | 15 赞,以前我都没想到这个用法 xargs -i echo "$rt {}"
【在 y****w 的大作中提到】 : 输入输出都是文本,干嘛折腾db?给你个我手头的unpivot shell版 : #!/usr/bin/ksh : #echo "only processing file with below format:" : #echo "root v1,v2,v3,v4...." : #echo "root v1 v2 v3 v4...." : #echo '----------------------------------' : infile=$1 : [[ ! -f $infile ]] && echo "not a file!" && return -1 : tmpf=$(mktemp) : cat $infile |sed '/^$/d' | while read rt val
|