I wrote a script that gather the space used by multiple datasets.
My database looks like the below:
Date_and_Time | Server_Name_and_Drive | Space_Used_(Gb) |
---|---|---|
08/04 00:00 | SERVER3 D DRIVE | 220 |
08/04 00:00 | SERVER2 D DRIVE | 10 |
08/04 00:00 | SERVER1 D DRIVE | 64 |
08/04 12:00 | SERVER3 D DRIVE | 221 |
08/04 12:00 | SERVER2 D DRIVE | 10 |
08/04 12:00 | SERVER1 D DRIVE | 67 |
09/04 00:00 | SERVER3 D DRIVE | 223 |
09/04 00:00 | SERVER2 D DRIVE | 11 |
09/04 00:00 | SERVER1 D DRIVE | 73 |
09/04 12:00 | SERVER3 D DRIVE | 225 |
09/04 12:00 | SERVER2 D DRIVE | 12 |
09/04 12:00 | SERVER1 D DRIVE | 75 |
Now, I want to get the data from my database. I am using the below to get a CSV out of it:
select * from myTable where Server_Name_and_Drive like "%DRIVE%" into outfile '/var/lib/mysql/myTable_date.csv' FIELDS TERMINATED BY ',';
This gives me the below output csv file:
08/04 00:00,SERVER3 D DRIVE,220
08/04 00:00,SERVER2 D DRIVE,10
08/04 00:00,SERVER1 D DRIVE,64
08/04 12:00,SERVER3 D DRIVE,221
08/04 12:00,SERVER2 D DRIVE,10
08/04 12:00,SERVER1 D DRIVE,67
09/04 00:00,SERVER3 D DRIVE,223
09/04 00:00,SERVER2 D DRIVE,11
09/04 00:00,SERVER1 D DRIVE,73
09/04 12:00,SERVER3 D DRIVE,225
09/04 12:00,SERVER2 D DRIVE,12
09/04 12:00,SERVER1 D DRIVE,75
Now, I would like to get the output differently and group the Date_and_Time, having only one line per same Date_and_Time, and the repeated row into column, such as below:
Date_and_Time,SERVER1 D DRIVE(Gb),SERVER2 D DRIVE(Gb),SERVER3 D DRIVE(Gb)
08/04 00:00,220,10,64
08/04 12:00,221,10,67
09/04 00:00,223,11,73
09/04 12:00,225,12,75
Is this possible using the "select" and "into outfile" to export it as CSV from the database?
Obviously, my table is much bigger and gather lots of different data, I simplify it this way to focus on the output I want.
Please, be kind as it is my first post here on stackoverflow.
Any help would be highly appreciated.
Regards, Nick
I tried to use pivot table on mysql but cannot make it to work.
database example:
Date_Time | Server_drive | areaUsed |
---|---|---|
2022-04-08 00:00:02 | /private_shares/SERVER01/DRIVES/G | 106953154560 |
2022-04-08 00:00:02 | /private_shares/SERVER02/DRIVES/F | 717575577600 |
2022-04-08 00:00:02 | /private_shares/SERVER03/DRIVES/D | 159979786240 |
2022-04-08 00:00:02 | /private_shares/SERVER04/DRIVES/W | 25792897024 |
2022-04-08 12:00:02 | /private_shares/SERVER01/DRIVES/G | 106953154560 |
2022-04-08 12:00:02 | /private_shares/SERVER02/DRIVES/F | 717718970368 |
2022-04-08 12:00:02 | /private_shares/SERVER03/DRIVES/D | 159979786240 |
2022-04-08 12:00:02 | /private_shares/SERVER04/DRIVES/W | 25792897024 |
2022-04-09 00:00:02 | /private_shares/SERVER01/DRIVES/G | 106953154560 |
2022-04-09 00:00:02 | /private_shares/SERVER02/DRIVES/F | 717718970368 |
2022-04-09 00:00:02 | /private_shares/SERVER03/DRIVES/D | 159981051904 |
2022-04-09 00:00:02 | /private_shares/SERVER04/DRIVES/W | 25792897024 |
2022-04-09 12:00:02 | /private_shares/SERVER01/DRIVES/G | 106953154560 |
2022-04-09 12:00:02 | /private_shares/SERVER02/DRIVES/F | 717874745344 |
2022-04-09 12:00:02 | /private_shares/SERVER03/DRIVES/D | 159977820160 |
2022-04-09 12:00:02 | /private_shares/SERVER04/DRIVES/W | 25792897024 |
I tried the following query but cannot make it to work:
SELECT areaUsage.Date_Time,
MAX(CASE WHEN areaUsage.Server_drive like "%SERVER01/DRIVES/G%" THEN areaUsage.areaUsed END) "SERVER01 DRIVE G",
MAX(CASE WHEN areaUsage.Server_drive like "%SERVER02/DRIVES/F%" THEN areaUsage.areaUsed END) "SERVER02 DRIVE F",
MAX(CASE WHEN areaUsage.Server_drive like "%SERVER03/DRIVES/D%" THEN areaUsage.areaUsed END) "SERVER03 DRIVE D",
MAX(CASE WHEN areaUsage.Server_drive like "%SERVER04/DRIVES/W%" THEN areaUsage.areaUsed END) "SERVER04 DRIVE W",
FROM areaUsage
GROUP BY areaUsage.Date_Time
ORDER BY areaUsage.Date_Time ASC;
Any idea what I am doing wrong?
The error output is as below:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'FROM areaUsage GROUP BY areaUsage.currentTime' at line 1