2016-12-17 4 views
0

У меня есть таблицы в базе данных Access со следующими столбцамиMS Access запрос для поиска записей с продолжавшейся датой в колонке ORDERDATE

ProductID|ProductName|StoreID|StoreName|AuditRating|AuditVisit|NextAuditDue 
100100 |Calculator |SC12345|CrawlyRoad| B  |11/12/2013|21/02/2014 
100100 |Calculator |SC12345|CrawlyRoad| A  |11/12/2014|30/04/2015 
100100 |Calculator |SC12345|CrawlyRoad| C  |16/12/2015|24/01/2017 

мне нужно сделать запрос, который будет только дать мне внятный отчет, где дата AuditVisit максимален, как и в данном случае я хочу только в третьем ряду

100100 |Calculator |SC12345|CrawlyRoad| C  |16/12/2015|24/01/2017 

Я использовал group by, но, как мне нужно, чтобы принести все столбцы Я получаю все записи в столбец AuditRating отличается во всех трех рядах.

ответ

1

Вы не хотите иметь группы, поэтому зачем использовать group by?

SELECT 
* 
FROM your_table 
WHERE AuditVisit = (SELECT MAX(AuditVisit) FROM your_table) 

Pretty self-explaining, думаю.

+0

Спасибо за быстрый ответ, но приведенный выше код не работает, так как моя таблица имеет несколько продуктов, и эти продукты имеют разные магазины и разные максимальные даты AuditVisit, и указанный выше запрос рассчитает максимальные данные во всем столбце, где мне нужна только максимальная дата для отдельной записи на уровне продукта – LondonUK

2

Вы можете использовать TOP 1:

Select Top 1 * From YourTable Order By AuditVisit Desc 
+0

Спасибо Gustav, что ваше решение работает. Мне просто нужно проверить, работает ли он на всей таблице, отметит это как ответ :) – LondonUK

+0

блестящий он работал на весь стол, спасибо за помощь, пожалуйста, оцените вопрос тоже :) – LondonUK

+0

жаль, что я только что нашел, что это решение изменило все значения столбцов даты на ту же самую максимальную дату, которая неверна. – LondonUK

1

Если вы хотите одну запись в MS Access, то вам нужно быть очень осторожным с SELECT TOP. Это действительно SELECT TOP WITH TIES.

Следовательно, очевидный ответ:

Select Top 1 * 
From t 
Order By AuditVisit Desc; 

будет возвращать несколько строк, если несколько строк имеют ту же дату. Если вы действительно хотите один, то вы хотите добавить уникальный столбец в качестве последнего ключа в порядке по:

Select Top 1 * 
From t 
Order By AuditVisit Desc, id; 

Я не вижу такого ключа в ваших данных, хотя вы могли бы иметь комбинацию столбцов которые уникальны в каждой строке (несколько столбцов могут быть добавлены к ORDER BY).

В MS Access - даже больше, чем в других базах данных - первичные ключи важны для таблиц по этой причине.