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

根据两列中的相应值导出MySQL表的一部分,mysql,export-to-csv,Mysql,Export To Csv,我正在使用将表保存到CSV文件 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` 这可以很好地保存Sta

我正在使用将表保存到CSV文件

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的每一行,但是在这个表中StartTime可以有多个EndTime。我想为StartTime-EndTimecombo的每个组合创建一个文件

我知道我可以从相关数据中选择*,其中StartTime='2018-06-17 21:00:00'和EndTime='2018-06-17 22:00:00'用于每个EndTime,但我会多次这样做,所以我需要一种方法来查找与每个StartTime对应的所有EndTime值。很明显,如果能用某种方法来自动在每次结束时查找并保存它们,那将是更好的选择,但这可能不是我的能力范围,因为我不是很有经验

更新: 我发现了

SELECT DISTINCT EndTime from RelevantData Where StartTime = '2018-06-17 21:00:00';
可以在开始时间内获得所有结束时间。但如果可能的话,我很想得到一些帮助,让它在不同的时间运行。我想我需要至少100个不同的文件,所以手动这样做会很单调


任何帮助都将不胜感激,谢谢

可能是这样的—首先为每个唯一的EndTime生成所需的SQL查询,然后逐个执行它们

注意:代码没有经过测试-只是给你一个想法

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

只需运行此查询并复制结果:选择DISTINCT CONCAT'mysql-B-uNAME-p…和EndTime=\,EndTime,\'…,FROM…这非常有效,非常感谢!是否有方法在名称中存储要使用的结束时间而不是${seq}?由于结束时间可能相差很大,因此查看间隔而不是序列将非常有用。我想弄明白,但我不太明白,所以还没有运气。再次感谢!您可以在CONCAT中添加结束时间-例如,选择ConcateEndTime、u。。。然后,当您逐行读取生成的文件时,将当前行的前20个字符作为EndTime,并将第20行之后的剩余符号发送到MySQL。