根据两列中相应的值导出mysql表的一部分

k5ifujac  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(379)

我正在使用

mysql -B -uNAME -pPASSWORD NameOfDatabase -e "SELECT * FROM relevantData WHERE StartTime = '2018-06-17 21:00:00' order by EndTime;" | sed "s/'/\'/;s/\t/\",\"/g;s/^/\"/;s/$/\"/;s/\n//g" > DataFor2018-06-17-21:00:00.csv`

它可以很好地保存每一行 StartTime = xx ,但在这张table上 StartTime 可以有多个 EndTime . 我想为每个组合创建一个文件 StartTime - EndTime 联合体。
我知道我可以用 SELECT * FROM relevantData WHERE StartTime = '2018-06-17 21:00:00' And EndTime ='2018-06-17 22:00:00' 对于每个 EndTime 但我要做很多次,所以我需要一个方法来找到所有的列表 EndTime 每个值对应的值 StartTime . 自动执行的方法(查找每个 EndTime 甚至可能挽救他们)显然会更好,但这可能是我的联盟,因为我不是很有经验。
更新:我发现了

SELECT DISTINCT EndTime from RelevantData Where StartTime = '2018-06-17 21:00:00';

为一个开始的时间得到所有的结束时间。但如果可能的话,我很想得到一些帮助,让它运行很多次。我想我需要至少100个不同的文件,这样做手动将是相当单调的。
任何帮助都将不胜感激,谢谢!

ki1q1bka

ki1q1bka1#

可能是这样的—您首先生成所需的sql查询(每个惟一的endtime对应一个查询),然后逐个执行它们。
注意:代码没有经过测试-只是给你一个想法

start='2018-06-17 21:00:00'

mysql -B -uNAME -pPASSWORD NameOfDatabase -e "SELECT CONCAT(\"SELECT * FROM relevantData WHERE StartTime = '$start' AND EndTime = '\",EndTime,\"'\") FROM (SELECT DISTINCT EndTime FROM RelevantData WHERE StartTime = '$start') AS tmp" | sed -e ':a;N;$!ba;' > tmp.sql

seq=1
while read -u 10 query || [[ -n $query ]]
do
  mysql -B -uNAME -pPASSWORD NameOfDatabase -e "$query" | sed "s/'/\'/;s/\t/\",\"/g;s/^/\"/;s/$/\"/;s/\n//g" > "DataFor${start}_${seq}.csv"`
(( seq++ ))
done 10<tmp.sql

相关问题