Я нашел несколько ответов на этот вопрос в другом месте, однако не смог применить эти ответы в своей конкретной ситуации.Получить одну строку за уникальное значение поля SQL
Давайте следующую таблицу:
ID | Name | Item | Year
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
1 | Dan | Chlorine | 2014
2 | Dan | Oxygen | 2013
3 | Jon | Helium | 2014
4 | Jon | Aluminum | 2015
5 | Dan | Propane | 2014
6 | Dan | Chlorine | 2016
То, что я ищу это запрос, который возвращает все записи Дэна, но я только хочу, чтобы вернуть последнюю запись (в год), если есть дубликат вещь (нет возможности для галстука).
Так что для приведенной выше таблицы, я хочу следующее вернулся:
ID | Name | Item | Year
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
2 | Dan | Oxygen | 2013
5 | Dan | Propane | 2014
6 | Dan | Chlorine | 2016
В настоящее время у меня есть следующий запрос, который будет просто получить все пункты Дэна отсортированных по годам:
SELECT * FROM `table` WHERE `Name` = `Dan` ORDER BY `Year` DESC;
Как Я делаю этот шаг дальше, чтобы получить только один ряд в год за элемент?
Есть тысячи ответов здесь (и в других местах), которые относятся к вашей конкретной ситуации. – Strawberry
выберите * from t1 где (имя, элемент, год) в (выберите имя, элемент, макс (год) от t1, где name = 'Dan' по имени, позиции). Если у вас есть дубликаты для элемента, а год и имя - разные. Я игнорирую оптимизацию. –
@Strawberry Если последнее всегда будет соответствовать более большому идентификатору, тогда запрос может быть упрощен и, скорее всего, будет более эффективным, если предположить, что «id» - это ключ. Я был бы консервативным, хотя [если ОП не поясняется], потому что иногда исправления данных производятся в базах данных, и тогда такие корреляции больше не сохраняются. –