webmail123 Ответов: 2

Выберите последние записи из таблицы


У меня есть динамическая таблица, состоящая из более чем 500 000 записей. Я хочу выбрать записи, которые были недавно добавлены.

epc                  toX toY observTime
000000000000000000000041    2.41    -6.22   2018-01-12 17:04:00.070
000000000000000000000041    3.45    -7.26   2018-01-12 17:14:30.090
000000000000000000000041    2.67    -6.48   2018-01-12 17:27:00.073
000000000000014028924001    0.73    -1.86   2018-01-12 17:31:30.083
000000000000014028924001    0.64    -1.89   2018-01-12 17:42:00.077
11110001                    1.96    -4.73   2018-01-12 17:31:30.083
11110001                    2.02    -4.68   2018-01-12 17:42:00.083
11110001                    2.1 -4.62   2018-01-12 17:21:00.090


Мне нужен такой вывод

epc	                toX	toY	observTime
000000000000000000000041	2.67	-6.48	2018-01-12 17:27:00.073
000000000000014028924001	0.64	-1.89	2018-01-12 17:42:00.077
11110001	                2.02	-4.68	2018-01-12 17:42:00.083


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

Что я уже пробовал:

SELECT epc, toX, toY, toFacility, toFloor, toZone, observTime
FROM  dbo.tbl_ItemHistoryInfo AS t1
WHERE ((SELECT COUNT(*) 
        FROM dbo.tbl_ItemHistoryInfo AS t2
        WHERE (epc = t1.epc) AND (observTime > t1.observTime)) = 0)


Я создал представление, используя этот запрос. Но я не получаю последних записей.
Не могли бы вы помочь мне, предоставив запрос, в котором я получу последние записи? Так же как и я должен учитывать временную сложность запроса. У меня более 500 000 записей. Так будет ли это хорошим решением для него?

David_Wimbley

Вы не добавили заказа на ваш запрос? Если столбец time в конце имеет значение observTime, то вы добавите ORDER BY observTime DESC

webmail123

@Давид. Спасибо за ответ. Я попробовал с этим

Выберите epc, toX, toY, toFacility, toFloor, toZone, observTime
Из dbo.tbl_ItemHistoryInfo как t1
Где ((выберите COUNT(*) как Expr1
Из dbo.tbl_ItemHistoryInfo как t2
Где (epc = t1.epc) и (observTime > t1.observTime)) = 0 )
заказ по observTime desc

но все равно не получаю ожидаемого результата.

ZurdoDev

Все, что вы сказали, это то, что вы хотите самые последние. Просто, заказывайте по вашей колонке дат. Сделано.

webmail123

Я также хочу избежать дубликатов. Вы можете еще раз взглянуть на то, как мне нужен был выход. Мне нужны epc, toX, toY и observTime.

ZurdoDev

Просто добавьте SELECT DISTINCT, чтобы избежать дубликатов. Я не знаю ваших данных, поэтому мне немного трудно вам помочь.

webmail123

@Давид.. Извините за путаницу. На самом деле, я упомянул свой вклад и свой ожидаемый результат в самом вопросе. Я еще раз упомяну об этом.

ЕРС токс игрушка observTime
000000000000000000000041 2.41 -6.22 2018-01-12 17:04:00.070
000000000000000000000041 3.45 -7.26 2018-01-12 17:14:30.090
000000000000000000000041 2.67 -6.48 2018-01-12 17:27:00.073
000000000000014028924001 0.73 -1.86 2018-01-12 17:31:30.083
000000000000014028924001 0.64 -1.89 2018-01-12 17:42:00.077
11110001 1.96 -4.73 2018-01-12 17:31:30.083
11110001 2.02 -4.68 2018-01-12 17:42:00.083
11110001 2.1 -4.62 2018-01-12 17:21:00.090

Данные, упомянутые выше, являются моими фактическими данными в таблице.

И то, что я на самом деле хочу, упоминается ниже:

ЕРС токс игрушка observTime
000000000000000000000041 2.67 -6.48 2018-01-12 17:27:00.073
000000000000014028924001 0.64 -1.89 2018-01-12 17:42:00.077
11110001 2.02 -4.68 2018-01-12 17:42:00.083


поэтому, если вы наблюдаете, я хочу выбрать значение epc, toX, toY и observTime. Но он должен быть последним на основе наблюдательного времени. В выходных данных, о которых я упоминал выше, значение epc, toX, toY выбирается с помощью недавнего времени наблюдения

webmail123

Извините за вывод таблицы. Имена столбцов: epc, toX, toY, observTime.

ZurdoDev

Хорошо, смотрите решение 2.

2 Ответов

Рейтинг:
4

ZurdoDev

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

SELECT DISTINCT t.epc, t.observtime
FROM table1 t
INNER JOIN (
  -- this derived table will give you the epc and the most recent time
  -- which you can then use to rejoin to your main table to get the rest of the fields
  SELECT epc, MAX(observTime) AS MaxobServTime
  FROM table1 
  GROUP BY epc
) x ON t.epc = x.epc AND t.ovservTime = x.MaxObservTime


Рейтинг:
0

OriginalGriff

Попробуйте что-нибудь вроде

SELECT TOP 100 * FROM MyTable ORDER BY MyDateColumn DESC


webmail123

Этот ответ не позволит избежать дубликатов. Он будет просто сортировать данные. Я не хочу сортировать данные. Мне нужны уникальные записи, которые являются недавними.

OriginalGriff

"Дубликаты", о которых вы не упомянули в вопросе, и я редко снимаю свою шляпу из фольги, чтобы читать мысли в эти дни...

Чтобы добавить distinct в запрос...

webmail123

Ну, если вы можете снять свою шляпу из фольги, чтобы прочитать ожидаемый результат с данного входа, то вы можете понять это.