Я заметил ошибку в моем предыдущем примере, так что вот обновление. ПРИМЕЧАНИЕ: запрос сравнивает текущую неделю с предыдущей. Я надеюсь, что это то, что вам нужно.
SELECT
Date,
SUM(CASE week WHEN 0 THEN accounts_credited ELSE 0 END) AS 'Accounts credited',
SUM(CASE week WHEN 0 THEN total_credited ELSE 0 END) AS 'Total Credited',
100 * (
SUM(CASE week WHEN 0 THEN total_credited ELSE 0 END) - SUM(CASE week WHEN 1 THEN total_credited ELSE 0 END)
) / SUM(CASE week WHEN 1 THEN total_credited ELSE 0 END) AS 'Difference in %'
FROM
(SELECT
DATE_FORMAT(created, '%Y-%m-%d') as 'Date',
COUNT(id) AS 'accounts_credited',
SUM(withdrawal) 'total_credited',
0 AS 'week'
FROM
statements
WHERE
status_id IN ('OPEN','PENDING')
AND
YEARWEEK(created, 1) = YEARWEEK(CURDATE(), 1)
GROUP BY
DATE(created)
UNION
SELECT
DATE_FORMAT(created, '%Y-%m-%d') as 'Date',
COUNT(id) AS 'accounts_credited',
SUM(withdrawal) 'total_credited',
1 AS 'week'
FROM
statements
WHERE
status_id IN ('OPEN','PENDING')
AND
(
DATE(created) >= CURDATE() - INTERVAL DAYOFWEEK(CURDATE())+6 DAY
AND
DATE(created) < CURDATE() - INTERVAL DAYOFWEEK(CURDATE())-1 DAY
)
GROUP BY
DATE(created)
) AS tmp
ORDER BY Date
GROUP BY Date
Из MSDN:
Этот метод определяет равенство с помощью компаратора EqualityComparer <T>.Default равенства по умолчанию для T, типа значений в списке.
Свойство Default проверяет, реализует ли тип T Систему. IEquatable <T> универсальный интерфейс и раз так возвращает EqualityComparer <T>, который использует ту реализацию. Иначе это возвращает EqualityComparer <T>, который использует переопределения Объекта. Равняется и Объект. GetHashCode обеспечивается T.
Кажется, что это использует, Равняется методу, если сохраненный класс не реализует интерфейс <T> IEquatable.
Это зависит от реализации объекта.Equals (..). По умолчанию для объекта, ссылки сравнены. Если бы Вы действительно изменяли его на структуру, то я полагаю, что это оценило бы к истинному на основе равенства членов парламента, не занимающих официального поста, но это все еще будет больше programmically звуковым для реализации IEquatable.
Для класса, с реализацией по умолчанию Равняется - она выдержит сравнение ссылкой.
При изменении его на tinyStruct это сравнит его значением.
Обязательно реализуйте .Equals (.. ) для вашей структуры, в качестве реализации по умолчанию может использоваться отражение для сравнения каждого поля, что очень дорого.
Подробнее читайте на: http://blogs.microsoft.co.il/blogs/sasha/archive/2007/08.aspx
это также может быть связано с тем, какой из экземпляров класса или структуры хранится в списке, поскольку равная реализация структур основана на равенстве значений