根据两列中的对应值导出 MySQL table 的部分

Export part of MySQL table depending on corresponding values in two columns

我正在使用

将 table 保存到 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 所在的每一行,但在此 table StartTime 中可以有多个 EndTime。我想为 StartTime-EndTimecombo 的每个组合创建一个文件。

我知道我可以对每个 EndTime 使用 SELECT * FROM relevantData WHERE StartTime = '2018-06-17 21:00:00' And EndTime ='2018-06-17 22:00:00' 但我要这样做很多次所以我需要一种方法来找到列表所有对应的 EndTime 值每个 StartTime。一些自动化的方法(找到每个 EndTime 甚至保存它们)显然是可取的,但它可能不在我的范围内,因为我不是很有经验。

更新: 我发现

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

致力于获取开始时间的所有结束时间。但是,如果可能的话,我很乐意在许多不同的时间获得一些帮助 运行。我想我至少需要 100 个不同的文件,所以手动执行此操作会非常单调。

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

也许是这样的 - 您首先生成所需的 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