Вычисление возраста [закрыт]

205
30 января 2020, 17:10
Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Переформулируйте вопрос, чтобы он соответствовал тематике «Stack Overflow на русском».

Закрыт 10 месяцев назад.

Есть данная таблица

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

Но есть проблема в составлении sql запроса..

System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection();
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Database777.mdb;";
conn.Open();
string my_querry = "SELECT AVG ([Дата рождения])  FROM [Новорожденные] where[Мужской]";
OleDbCommand cmd4 = new OleDbCommand(my_querry, conn);
count = (int)cmd4.ExecuteScalar();
AVG.Text = count.ToString();
conn.Close();

Avg текст бокс

UPD Решил последовать по самому последнему посту,пока что не получается

Answer 1

Вы не назвали базу, поэтому вот Вам запрос, который решает Вашу задачу для MS SQL:

SELECT [Пол], AVG(DATEDIFF(day,[Дата смерти],[Дата Рождения])) AS 'Duration' 
  FROM [Умершие]
  GROUP BY [Пол]

Соответственно для для каждого пола он выводит среднюю продолжительность в днях. Если Вам продолжительность нужна в других величинах, то это делается с помощью первого параметра функции DATEDIFF. Вот ссылка на ее описание https://msdn.microsoft.com/ru-ru/windows/desktop/ms189794

P.S. Screen теста:

P.P.S.: Добавляю по Ваше просьбе пример фрагмента кода для чтения данных:

OleDbDataReader dr;
dr=cmd5.ExecuteReader();
while( dr.Read )
{
    string gender = dr.GetString(0);        //род - колонка с номером 0
    int duration = dr.GetInt32(1);          //Продолжительность - колонка с номером 1
}

В Вашем случае этот цикл сработает дважды. Поскольку Вы не дали своего кода, то встраивать чтение данных Вам придется самому. Естественно, что это все должно быть в скобочках try {} catch().

Еще одно замечание - номера полей, которые используются как аргументы в функции dr.GetString(...) и dr.GetInt32(...), могут быть вычислены с помощью функции dr.GetOrdinal("Пол"); и dr.GetOrdinal("Duration");

Полезные ссылки на тему OleDbDataReader:

https://docs.microsoft.com/ru-ru/dotnet/api/system.data.sqlclient.sqlcommand.executereader?view=netframework-4.7.2

https://metanit.com/sharp/adonet/2.6.php

Answer 2

Не самый лучший, но рабочий вариант. В параметр функции передаёшь значение пола, функция возвращает массив со всеми вычисленными значениями возраста определённого пола. А уже потом делишь сумму массива на количество элементов. В идеале, конечно, всё это делать сразу через функции SQL.

upd: убрал "обёртку" php, оставил шаблон sql-запроса

SELECT [Пол], [Дата рождения], [Дата смерти], 
(YEAR([Дата смерти])-YEAR([Дата рождения]))-(RIGHT([Дата смерти],5)
<RIGHT([Дата рождения],5)) AS [Возраст] FROM [Люди] 
WHERE [Пол] = '{входной параметр функции}'
READ ALSO
Строка подключения MS SQL Server в локальной сети

Строка подключения MS SQL Server в локальной сети

Как должна выглядеть строка подключения к MS SQL Server 2008 при условии, что экземпляр MS SQL Server установлен на одном из удалённых компьютеров, расположенных...

205
Юнит тесты Entity Framework

Юнит тесты Entity Framework

Хочу протестировать сервисы работы с БД через EF

181
Возврат значения из колбека c#

Возврат значения из колбека c#

Есть у меня некоторый метод:

183
Как выполнить выборку работы с БД

Как выполнить выборку работы с БД

Подскажите плизГде прочитать или кто то уже сталкивался

194