Как насчитать временные интервалы?

Вам нужен контракт, чтобы различать пункты меню предложений и остальные пункты меню, затем при добавлении предложений сначала удалите существующие пункты предложений, а затем добавьте новые.

Здесь в качестве примера я использую свойство Tag для ToolStripMenuItem в качестве контракта, и все пункты полосы меню, имеющие в своем теге suggestion, рассматриваются как рекомендации:

public void Suggest(List<string> words, ContextMenuStrip menu)
{
    string suggestion = "suggestion";
    menu.Items.Cast<ToolStripItem>().Where(x => x.Tag == (object)suggestion)
        .ToList().ForEach(x => menu.Items.Remove(x));

    words.ToList().ForEach(x =>
    {
        var item = new ToolStripMenuItem(x);
        item.Tag = suggestion;
        item.Click += (s, e) => MessageBox.Show(x);
        menu.Items.Insert(0, item);
    });
}

И как использование, для одного слова:

Suggest(new List<string> { "something", "something else" }, contextMenuStrip1);

Для другого слова:

Suggest(new List<string> { "another", "another one" }, contextMenuStrip1);
15
задан OMG Ponies 1 April 2011 в 04:19
поделиться

4 ответа

Самый чистый путь состоит в том, чтобы записать Вашу собственную агрегатную функцию, чтобы сделать это, так как это обработает это наиболее чисто (обрабатывает подвторое разрешение, и т.д.).

На самом деле этот вопрос задали (и ответил) на asktom.oracle.com некоторое время назад (статья включает исходный код).

7
ответ дан 1 December 2019 в 00:50
поделиться

Если Ваш endtime и starttime не в течение секунды друг после друга, можно снять метки времени в качестве дат и сделать арифметику дат:

select avg(cast(endtime as date)-cast(starttime as date))*24*60*60 
  from timings;
9
ответ дан 1 December 2019 в 00:50
поделиться

Не похоже, что существует любая функция, чтобы сделать явное преобразование INTERVAL DAY TO SECOND кому: NUMBER в Oracle. Посмотрите таблицу в конце этого документа, который подразумевает, что нет такого преобразования.

Другие источники, кажется, указывают, что метод, который Вы используете, является единственным способом получить число от INTERVAL DAY TO SECOND тип данных.

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

select
     avg(
       (extract( second from endtime)  +
        extract ( minute from endtime) * 60 +
        extract ( hour   from  endtime ) * 3600) - 
       (extract( second from starttime)  +
        extract ( minute from starttime) * 60 +
        extract ( hour   from  starttime ) * 3600)
      ) from timings;
2
ответ дан 1 December 2019 в 00:50
поделиться

Ну, это - действительно быстрый и грязный метод, но что относительно того, чтобы хранить различие секунд в отдельном столбце (необходимо ли будет использовать триггер или вручную обновить ли это, если запись изменится), и усреднение по тому столбцу?

1
ответ дан 1 December 2019 в 00:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: