根据两列中的对应值导出 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
-EndTime
combo 的每个组合创建一个文件。
我知道我可以对每个 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
我正在使用
将 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
-EndTime
combo 的每个组合创建一个文件。
我知道我可以对每个 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