SQL
SELECT some_columns,
DATE_ADD(
DATE_FORMAT(the_date, "%Y-%m-%d %H:00:00"),
INTERVAL IF(MINUTE(the_date) < 30, 0, 1) HOUR
) AS the_rounded_date
FROM your_tableSELECT
payments.paywall, paywall.views, payments.money
FROM
(SELECT p.paywall, concat("$", round(sum(p.productPrice)) AS money FROM payments AS p GROUP BY p.paywall) AS payments
LEFT JOIN
(SELECT pw.paywall, count(*) AS views FROM paywall AS pw GROUP BY pw.paywall) AS paywall ON payments.paywall = paywall.pay