Hello again and thank you in advance for your help.
I've checked a few prior questions and couldn't find this exact situation.
I'm trying to transpose/pivot a row to column, but the results are based on a date function in the where clause, making my selects somewhat variable.
SELECT
DATE_FORMAT(packet_details.installDate,'%m-%d-%Y') as Install_Date,
Count(packet_details.installDate)
FROM
packet_details
WHERE
packet_details.installDate >= CURRENT_DATE - INTERVAL 7 DAY
AND packet_details.installDate "*lessthan*" CURRENT_DATE + INTERVAL 7 DAY
GROUP BY installDate
*lessthan symbol wont show here on Stack & i don't know how to fix it
Not sure if that makes sense so I included a fiddle: http://sqlfiddle.com/#!2/5b235/3/0
So something like this:
INSTALL_DATE COUNT
1/24/2013 2
1/25/2013 2
1/26/2013 2
1/27/2013 2
1/28/2013 2
1/29/2013 1
2/3/2013 1
2/4/2013 1
2/5/2013 5
2/6/2013 4
Turned into:
INSTALL_DATE 1/24/2013 1/25/2013 1/26/2013 1/27/2013 1/28/2013....
COUNT 2 2 2 2 2 1
SELECT Install_DATE,
MAX(CASE WHEN Install_DATE = '01-24-2013' THEN totalCount END) `01-24-2013`,
MAX(CASE WHEN Install_DATE = '01-25-2013' THEN totalCount END) `01-25-2013`,
MAX(CASE WHEN Install_DATE = '01-26-2013' THEN totalCount END) `01-26-2013`,
.......
FROM
(
SELECT DATE_FORMAT(packet_details.installDate,'%m-%d-%Y') as Install_Date,
Count(packet_details.installDate) totalCount
FROM packet_details
WHERE packet_details.installDate >= CURRENT_DATE - INTERVAL 7 DAY AND
packet_details.installDate < CURRENT_DATE + INTERVAL 7 DAY
GROUP BY installDate
) s
For unknown number of Install_Date
, a Dynamic Query is much preferred,
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'MAX(CASE WHEN Install_DATE = ''',
Install_Date,
''' then totalCount end) AS `', Install_Date, '`' )
) INTO @sql
FROM
(
SELECT DATE_FORMAT(packet_details.installDate,'%m-%d-%Y') as Install_Date,
Count(packet_details.installDate) totalCount
FROM packet_details
WHERE packet_details.installDate >= CURRENT_DATE - INTERVAL 7 DAY AND
packet_details.installDate < CURRENT_DATE + INTERVAL 7 DAY
GROUP BY installDate
) s;
SET @sql = CONCAT('SELECT Install_DATE, ', @sql, '
FROM
(
SELECT DATE_FORMAT(packet_details.installDate,''%m-%d-%Y'') as Install_Date,
Count(packet_details.installDate) totalCount
FROM packet_details
WHERE packet_details.installDate >= CURRENT_DATE - INTERVAL 7 DAY AND
packet_details.installDate < CURRENT_DATE + INTERVAL 7 DAY
GROUP BY installDate
) s');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;